我这里用的主库阿里云的RDS mysql版本为8.0,
主从配置需要注意的点
Master 和 Slave 数据库的版本要一致;
Master 开启二进制日志, Master 和 Slave 的 server_id 不能一致;
从主机Centos下安装Mysql8 可参考以下教程
https://blog.csdn.net/qq_39150374/article/details/112471108
注意:
使用 service mysqld start 可能会出现错误,无法启动。
请使用 systemctl start mysqld 命令
systemctl start/stop/status mysqld
设置Mysql开机自启动
1、确保权限
chmod +x /etc/rc.d/rc.local
2、在ect目录下创建脚本
vi MysqlStart.sh
#!/bin/bash
service mysqld start
赋予权限
chmod +x /etc/MysqlStart.sh
3、编辑/etc/rc.d/rc.local文件
vi /etc/rc.d/rc.local
4、重启机器
reboot
将本地从实例的 IP 地址加入主实例的 IP 白名单中
查询主实例的 server-id
1、打开从实例 MySQL 配置文件。
vim /etc/my.cnf
2、配置从实例的 server-id 和要同步的数据库。
#mysql 服务ID主从实例service-id需不同
server-id=15646844
log_bin=/var/log/mysql/mysql-bin.log
binlog_expire_logs_seconds=864000
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
#需要同步的数据库
replicate-do-db=jy-shop
#不需要同步的数据库
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
#开启gitid模式
gtid_mode=on
#保证GTID安全的参数
enforce_gtid_consistency=on
#主从同步模式
binlog_format=row
#让主机接收到bin_log后也同步到自己的bin_log上
log_replica_updates=ON
3、执行如下命令,查看 binlog 配置结果。
show variables like '%binlog_format%';
4、登录数据库设置同步选项
mysql> change master to master_host = 'rds主库外网地址', master_port = 3306, master_user = '主库账号', master_password='密码', master_auto_position = 1;
5、启动从库实例
mysql> start slave;
6、查看本机mysql同步状态
mysql>show slave status;
查看系统返回信息中 Slave_IO_Running 和 Slave_SQL_Running 的状态是否为 Yes,如下。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如果都为yes代表设置成功。
问题1、在第一步设置完log_bin目录后会造成 mysql无法启动,
通过查看/var/log/mysqld.log发现是/var/log/mysql/mysql-bin.index not found 错误
主要因为文件夹权限的问题。刚才新建的binlog目录 /var/log/mysql/mysql-bin.log
在 /var/log目录下创建mysql文件夹,然后授权
chown mysql:mysql -R /var/log/mysql
启动成功。
问题2:Slave_IO_Running状态为Connecting
问题 :分析
(1)网络不通
(2)防火墙端口未开放
(3)mysql账户密码错误
(4)mysql主从机配置文件写错
(5)配置从机连接语法错误
(6)主机未开放账户连接权限
我这里出现了3和6两个,账户写错,未放开主库账户的远程登录权限
问题3:Slave_SQL_Running: NO 问题
首先出现的是 Got fatal error 1236 from master when reading data from binary log错误。
2022-10-11T06:43:57.815382Z 17 [ERROR] [MY-013114] [Repl] Slave I/O for channel '': Got fatal error 1236 from master when reading data from binary log: 'Cannot replicate because the master purged required binary logs. Replicate the missing transactions from elsewhere, or provision a new slave from backup. Consider increasing the master's binary log expiration period. The GTID set sent by the slave is '689f2d92-4915-11ed-a038-00163e0e8f9c:1-179', and the missing transactions are '23654640-4088-11ed-ae1d-00163e08e553:1-46747'', Error_code: MY-013114
解决方法:
1、登陆slave库
2. stop slave
mysql> stop slave;
mysql> reset slave all;
mysql> reset master;
Query OK, 0 rows affected, 1 warning (0.01 sec)
#23654640-4088-11ed-ae1d-00163e08e553:1-46747 为上述错误中出现的数字
mysql> SET @@GLOBAL.GTID_PURGED='23654640-4088-11ed-ae1d-00163e08e553:1-46747';
mysql> start slave;
mysql> show slave status;
这时候发现Slave_SQL_Running:还是 NO
再次查看mysqld.log发现Unknown or incorrect time zone: ‘Asia/Shanghai时区错误
Slave SQL for channel '': Worker 1 failed executing transaction '23654640-4088-11ed-ae1d-00163e08e553:47188' at master log mysql-bin.000049, end_log_pos 134689; Error 'Unknown or incorrect time zone: 'Asia/Shanghai'' on query. Default database: ''. Query: 'CREATE USER '****'@'%' IDENTIFIED WITH 'mysql_native_password' AS '*DE8B3934BD28FC61FE53A9162B63A6D1CD873EF9'', Error_code: MY-001298
通过查看目前从库的时区没有 Asia/Shanghai
mysql>show variables like '%time_zone%';
默认这个时区设置是没有的,mysql默认不支持’Asia/Shanghai’这种时区格式
mysql>set global time_zone='Asia/Shanghai';
ERROR 1298 (HY000): Unknown or incorrect time zone: 'Asia/Shanghai'
需要从mysql官网下载一个时区文件,下载地址:https://dev.mysql.com/downloads/timezones.html
我们下载5.7+以上这个版本。
下载完成后,解压后是一个SQL文件,将SQL文件导入到系统库mysql中,然后就支持设置支持’Asia/Shanghai’这种时区格式
再开启 从库发现 ok了