MySQL 主从复制的方式有多种,本文主要演示基于基于日志(binlog)的主从复制方式。
MySQL 主从复制(也称 A/B 复制) 的原理
Master将数据改变记录到二进制日志(binary log)中,也就是配置文件log-bin指定的文件,
这些记录叫做二进制日志事件(binary log events);
Slave 通过 I/O 线程读取 Master 中的 binary log events 并写入到它的中继日志(relay log);
Slave 重做中继日志中的事件, 把中继日志中的事件信息一条一条的在本地执行一次,完
成数据在本地的存储, 从而实现将改变反映到它自己的数据(数据重放)。
主从配置需要注意的点
主从服务器操作系统版本和位数一致;
Master 和 Slave 数据库的版本要一致;
Master 和 Slave 数据库中的数据要一致;
Master 开启二进制日志, Master 和 Slave 的 server_id 在局域网内必须唯一;
以上内容抄的:原文链接:https://blog.youkuaiyun.com/zyhlwzy/article/details/80569422
注意:
我是使用VM虚拟机安装的ubuntu系统,安装的是最新的mysql 8.0,然后克隆出来一个实例
主节点IP:192.168.75.129
从节点IP:192.168.75.130
1、主节(Master)点配置
修改 Master 的配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf
cd /etc/mysql/mysql.conf.d
sudo vi mysqld.cnf
在mysqld.cnf文件中加入如下配置内容
[mysqld]
log-bin=mysql-bin
server-id=1
2、从节点(Slave)配置
修改 Slave 的配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf
cd /etc/mysql/mysql.conf.d
sudo vi mysqld.cnf
在my.cnf文件中加入如下配置内容
[mysqld]
server-id=2
3、创建用于复制操作的用户
在主节点创建一个用户repl,用于从节点链接主节点时使用。
mysql> CREATE USER 'repl'@'192.168.75.130' IDENTIFIED WITH mysql_native_password BY 'Ron_master_1';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.75.130';
刷新授权表信息
mysql> flush privileges;
4、获取主节点当前binary log文件名和位置(position)
mysql> SHOW MASTER STATUS;
5、在从(Slave)节点上设置主节点参数
mysql> CHANGE MASTER TO MASTER_HOST='192.168.75.129',MASTER_USER='repl',MASTER_PASSWORD='Ron_master_1',MASTER_LOG_FILE='mysql-bin.000005',MASTER_LOG_POS=156;
6、查看主从同步状态
mysql> show slave status\G;
7、开启主从同步
mysql> start slave;
8、再查看主从同步状态
mysql> show slave status\G;
查看状态时,可能会出现I/O任务启动失败的情况,即如下错误:
从报错来看,最先以为是server-id冲突了,然后运行命令看了,发现主从mysql的server-id都是正确的,没有冲突
mysql>show variables like 'server_id';
主服务器
从服务器
后来网上搜了下,因为我是克隆的实例,所以两个mysql的 server-uuid是一样的(仔细看报错,也说明了server-uuid),解决方案如下:
修改uuid配置文件
# sudo find / -name 'auto.cnf'
# sudo vim /data/mysql/auto.cnf
[auto]
server-uuid=804f2ebe-3a1c-11e8-ab46-000c29133368 # 按照这个16进制格式,修改server-uuid,重启mysql即可
获取uuid可以在mysql命令行运行
MySQL [hb3]> select uuid();
+--------------------------------------+
| uuid() |
+--------------------------------------+
| a39fd903-3a1c-11e8-ab46-000c29133368 |
+--------------------------------------+
1 row in set (0.00 sec)
9、重新开启同步并查看装态
mysql> start slave;
mysql> show slave status\G;
如果出现报错:ERROR 3021(HY000):this operation cannot be performed with a running salve io thread
可用以下方法尝试
1、停止已经启动的绑定
stop slave
2、重置绑定
reset master
3、执行复制主机命令
change master to master_host = '192.168.12.1' master_user = 'slave' ,master_password ='123456' ,master_log_file = 'mysql-bin.000004',master_log_pos = '881'
4、发现此时已经不报错
5、启动复制
start slave
最终这就表示成功了
10、测试
我们可以在主库创建个数据库,这个时候从库可会同步过来