Mysql主从同步
一、Mysql主从同步原理
master的数据更改操作存入二进制日志中
slave开启了两个线程,I/O线程和SQL线程,I/O线程读取master的二进制日志写入本地中继,SQL读取中继日志后进行日志重放,即在slave上执行相同的操作,使数据库与master同步。应用程序对master可进行读写操作,对slave只能进行读操作。
二、Mysql主从部署
1、 master配置修改
vi /etc/my.cnf
[mysqld]
server-id=1 //服务器唯一ID,默认是1,主从要不同
log-bin=mysql-bin //启用二进制日志
binlog_do_db=test //要进行同步的数据库名
2、 slave配置修改
[mysqld]
server-id=2
log-bin=mysql-bin
master_host=172.16.1.16 //master的ip
master_user=replication //master数据库用于同步的用户名
master_port=3306 //master数据库端口
mater_connect_retry=60 //每隔60秒同步一次
replicate-do-db=test //需要同步的库名
3、 帐号权限设置
slave使用master上的replication@%账户登陆master与其进行通信,这个账户在master上要真实存在并有replication slave和read属性
mysql>grant replication slave on *.* to ‘replication’@’%’ identified by ‘123456’;
mysql>flush privileges; //刷新权限,使设置生效
4、 功能启动及状态查看
重启两台服务器的mysql: service mysqld restart
1).登录master的mysql
mysql>show master status;
2).登录slave的mysql
mysql>slave start; //启动slave服务
mysql>show slave status\G
Slave_IO_Running和Slave_SQL_Running两项均为Yes,则状态正常。
三、功能验证
验证前需要保证Master和Slave数据库内容一致,否则可能会出现同步错误,若出现错误,则可在配置的mysql服务器日志中查看,默认日志路径为/var/log/mysqld.log。
在master的test数据库中创建表user并添加一条数据
mysql>create table user
(
name char(15) not null,
pass char(15) not null,
primary key(name)
);
mysql>insert into user(name,pass) values(‘test’,’test’);
在slave中查看test数据库当前表以及表内容
可看到slave中已同步了master的操作。
注:mysql主从不同步问题解决
某些主从数据库数据不一致的情况会导致主从通信无法正常继续,一旦出现不能同步,应该先解决同步位置的问题,修复丢失的数据。
1、 停掉slave服务
mysql>slave stop;
2、 到master上查看主机状态,记下File和Position的值。
mysql>show master status;
3、 到salve上执行手动同步:
mysql>change master to
>master_host=’172.16.1.16’,
>master_user=’replication’,
>master_password=’123456’,
>master_port=3306,
>master_log_file=’mysql-bin.000001’,
>master_log_pos=885;
4、开启slave服务
mysql>slave start;