linux mysql主从同步

  • Post author:
  • Post category:linux




主从同步

原理:

在这里插入图片描述

(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

在这里插入图片描述

问题就会解决



版权声明:本文为MZdzt原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。