主从同步
原理:
(1)MySQL将数据变化记录到二进制日志中;
(2)Slave将MySQL的二进制日志拷贝到Slave的中继日志中;
(3)Slave将中继日志中的事件在做一次,将数据变化,反应到自身(Slave)的数据库
环境准备:两台机器
主库:ip 192.168.211.129 port 3306
从库:ip 192.168.211.131 port 3306
主库设置
1、主库配置
/etc/my.cnf
log_bin=mysql_bin
server_id=129
重启数据库
2、建立同步账号
建立账号
mysql> create user 'rep2'@'%' identified with mysql_native_password by '123456';
授权
mysql> grant replication slave on *.* to 'rep2'@'%';
刷新权限
mysql> flush privileges;
3、锁表设置只读,为后面备份做准备
mysql> flush tables with read lock;
mysql> show variables like '%timeout%';
提示:如果超过设置时间不操作会自动解锁。
测试锁表后是否可以创建数据库
4、查看主库状态
mysql> show master status;
5、备份数据库
mysqldump -uroot -p -A -B |gzip > /server/backup/mysql_bak.$(date +%F).sql.gz
6、解锁
mysql> unlock tables;
7、从主库备份数据上传到从库
scp /server/backup/mysql_bak.2015-11-18.sql.gz 192.168.95.130:/server/backup/
从库上设置
1、配置从库
/etc/my.cnf
log_bin = /data/mysql/data/mysql-bin
server_id = 131
2、还原从主库传来的备份的数据
cd /server/backup/
gzip -d mysql_bak.2015-11-18.sql.gz
mysql -uroot -p < mysql_bak.2015-11-18.sql
检查还原
mysql -uroot -p -e 'show databases;'
3、设定从主库同步
mysql> change master to mysql>MASTER_HOST='192.168.211.129', mysql>MASTER_PORT=3306,
mysql>MASTER_USER='rep2', mysql>MASTER_PASSWORD='123456', mysql>MASTER_LOG_FILE='mysql-bin.000001', mysql>MASTER_LOG_POS=1460;
HOST 为主库ip,PORT为主库端口,USER为同步账号的名,PASSWORD为同步账号的密码,LOG_FILE为主库状态的file名,LOG_POS为主库Position的值
4、启动同步开关
mysql> start slave;
5、检查状态
mysql> show slave status\G
当这两条为YES就ok了
当从库是用主库克隆出来的
主库设置
1、主库配置
/etc/my.cnf
log_bin=mysql_bin
server_id=129
重启数据库
2、建立同步账号
建立账号
mysql> create user 'rep2'@'%' identified with mysql_native_password by '123456';
授权
mysql> grant replication slave on *.* to 'rep2'@'%';
刷新权限
mysql> flush privileges;
因为是克隆,所以主库有的,从库也有,就不用备份传输
3、查看主库状态
mysql> show master status;
从库上设置
1、配置从库
/etc/my.cnf
log_bin = /data/mysql/data/mysql-bin
server_id = 131
3、设定从主库同步
mysql> change master to mysql>MASTER_HOST='192.168.211.129', mysql>MASTER_PORT=3306,
mysql>MASTER_USER='rep2', mysql>MASTER_PASSWORD='123456', mysql>MASTER_LOG_FILE='mysql-bin.000001', mysql>MASTER_LOG_POS=1460;
HOST 为主库ip,PORT为主库端口,USER为同步账号的名,PASSWORD为同步账号的密码,LOG_FILE为主库状态的file名,LOG_POS为主库Position的值
4、启动同步开关
mysql> start slave;
5、检查状态
mysql> show slave status\G
克隆出来的一次不会成功,会碰到问题
问题1
当查看从库的状态信息,出现Slave_IO_Running: Connecting 因为是克隆出来的 主库得UUID和从库得UUID是一样的
所以,将从库的UUID修改成不一样的就ok
ll /var/lib/mysql/auto.cnf
rm -f /var/lib/mysql/auto.cnf
/var/lib/mysql/auto.cnf里存的是UUID,将从库的auto.cnf删除,
重启mysql
就会自动生成新的auto.cnf文件,里面也会自动生成新的UUID。
问题2
在主库上重新授权
GRANT ALL PRIVILEGES ON *.* TO 'rep2'@'%';
刷新权限
flush privileges;
从库从新启动Slave并查看状态
stop slave;
start slave;
show slave status \G
问题就会解决