两台创建单实例数据库安装mysql8.0版本的数据库
192.168.0.3
192.168.0.4
官网下载mysql-8.0.28-1.el7.x86_64.rpm-bundle.tar
安装并启动
每次更改/etc/my.cnf配置文件后,重启mysqld
rpm -ivh *.rpm --nodeps --force
systemctl restart mysqld.service
systemctl enable mysqld.service
systemctl stop mysqld.service
主库配置
|
从库配置
|
主库创建同步用户
CREATE USER master_user IDENTIFIED BY 'HF$$$$%%%a1';
grant replication slave on *.* to 'master_user'@'192.168.0.4';
FLUSH PRIVILEGES;
主库查看主库bin log文件名称和存放位置
备库执行语句加入主库
备库日志
mysql> CHANGE MASTER TO
MASTER_HOST='192.168.0.3',
MASTER_PORT=3306,
MASTER_USER='master_user',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=1463;
从库开启主从同步
start slave;
备库报错日志
权限问题
update user set host='%' where user='master_user';
关掉同步重新开始
stop slave;
start slave;
查看状态
show slave status;
初始的遗留数据的更改会受到影响,新增的数据和删除不会受到影响
到此主从数据库是搭建完毕,和测试完毕
接下来做将主从数据库更改为主主模式的数据库备份方式
相互之间互为主从
从库创建同步账户
从库查看show master status;
CREATE USER master_user2 IDENTIFIED BY 'HF$$$$%%%a1';
grant replication slave on *.* to 'master_user2'@'%';
FLUSH PRIVILEGES;
主库执行语句加入主库
mysql> CHANGE MASTER TO
MASTER_HOST='192.168.0.4',
MASTER_PORT=3306,
MASTER_USER='master_user2',
MASTER_PASSWORD='HF$$$$%%%a1',
MASTER_LOG_FILE='mysql-bin.000004',
MASTER_LOG_POS=2068,
master_connect_retry=60,
GET_MASTER_PUBLIC_KEY=1;
start slave;
主库加入从库的日志
mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for source to send event
Master_Host: 192.168.0.4
Master_User: master_user2
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 2068
Relay_Log_File: mysql-relay-bin.000002
Relay_Log_Pos: 326
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
mysql主主搭建完成了,测试创建库,删除库,导入库,删除表,删除数据,导入数据等等,只要数据库服务器资源充足,可以同时进行,经过测试,对服务器的CPU要求不高,对内存要求很对,最低最低是要8G的资源,设置读写分离,读的库,要设置更高的资源
配置监控主从同步的脚本
|
cat /usr/local/z/.profile
|
mysql主从报错状态码
报错1:
ERROR 4031 (HY000): The client was disconnected by the server because of inactivity. See wait_timeout and interactive_timeout for configuring this behavior.
No connection. Trying to reconnect...
处理
mysql所在主机内存过低,清理内存,或者扩容内存尝试
报错2:
2022-05-25T01:58:50.294117Z 26 [ERROR] [MY-013117] [Repl] Slave I/O for channel '': Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. Error_code: MY-013117:
处理
stop slave;
stop slave;
systemctl stop mysqld
[root@mysql002 mysql]# cat /data/mysql8/mysql/auto.cnf
[auto]
server-uuid=942c69f1-bfae-11ec-a28d-fa163edc5045
[root@mysql002 ~]# rm -f /data/mysql8/mysql/auto.cnf
[root@mysql002 ~]# systemctl start mysqld
[root@mysql002 ~]# cat /data/mysql8/mysql/auto.cnf
[auto]
server-uuid=109c844e-dbcf-11ec-b1db-00163e010279
mysql -uroot -p
start slave;
报错3:
2022-05-25T02:18:48.672608Z 22 [ERROR] [MY-010584] [Repl] Slave SQL for channel '': Worker 1 failed executing transaction '942c69f1-bfae-11ec-a28d-fa163edc5045:7' at master log mysql-bin.000005, end_log_pos 1558; Error 'Can't drop database 'bbb'; database doesn't exist' on query. Default database: 'bbb'. Query: 'DROP DATABASE `bbb`', Error_code: MY-001008
2022-05-25T02:18:48.672758Z 21 [Warning] [MY-010584] [Repl] Slave SQL for channel '': ... The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state. A restart should restore consistency automatically, although using non-transactional storage for data or info tables or DDL queries could lead to problems. In such cases you have to examine your data (see documentation for details). Error_code: MY-001756
查看从库同步状态
查看主库数据,没有查看到
查看主库的bin log日志
mysqlbinlog --no-defaults -v /data/mysql8/mysql/mysql-bin.000005 |grep -A 20 "fa163edc5045" --color
查看时间点是删除了一个库,初始时没有同步,从库中没有这个库,所以删除数据时从库没有删除的项,不影响数据一致性,是初始搭建时遗留历史数据导致
主从数据恢复一致后需要在slave上跳过报错的事务
在从库中执行
再次查看从库状态,恢复正常即解决
stop slave;
set @@SESSION.GTID_NEXT='942c69f1-bfae-11ec-a28d-fa163edc5045:7';
begin;
commit;
set @@SESSION.GTID_NEXT = AUTOMATIC;
start slave;
show slave status\G;
或者将同步指针调整为下一个操作也可以解决该问题
stop slave;
set global sql_slave_skip_counter = 1;
start slave;