mysql8.0 主从复制安装及配置

原理:主库的所有变更操作(写入更新)都会视为事件,写入二进制日志文件中。从库通过读取主库的二进制日志文件,并在从库中执行这些事件,达到主从同步。

准备两台服务器,分别在两台服务器进行以下配置:

cd /etc/my.cnf.d
vim mysql-server.conf

主数据库配置核心部分

#设置同步的binary log二进制日志文件名前缀,默认为binlog
log-bin=mysql-bin
#服务器唯一id,默认为1  主数据库和从数据库的server-id不能重复
server-id=1      

#需要复制的数据库
binlog-do-db=test
#过滤,也就是指定哪个数据库不用同步
binlog-ignore-db=mysql
#为每个session分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
#主从复制的格式(mixed,statement,row,默认格式是statement。建议是设置为row,主从复制时数据更加能够统一)
binlog_format=row
#设置二进制日志自动删除/过期的天数,避免占用磁盘空间。默认值为0,表示不自动删除。
expire_logs_days=7
#跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
#如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

重启数据库

service mysqld restart

执行mysql语句

create user 'root'@'%' identified by '123456';
grant replication slave on *.* to 'root'@'%';
flush privileges;
show master status \G
*__将File及Position复制下来,从库配置会用到上面的信息__*

cd /etc/my.cnf.d
vim mysql-server.conf

从库数据库配置核心部分

# 设置同步的binary log二进制日志文件名前缀,默认是binlog
log-bin=mysql-bin
# 服务器唯一ID  主数据库和从数据库的server-id不能重复
server-id=2

###可选配置
# 需要主从复制的数据库 
replicate-do-db=test
# 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步) 
binlog-ignore-db=mysql
# 为每个session分配的内存,在事务过程中用来存储二进制日志的缓存 
binlog_cache_size=1M
# 主从复制的格式(mixed,statement,row,默认格式是statement。建议是设置为row,主从复制时数据更加能够统一) 
binlog_format=row
# 设置二进制日志自动删除/过期的天数,避免占用磁盘空间。默认值为0,表示不自动删除。 
expire_logs_days=7
# 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 
# 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 
slave_skip_errors=1062
# relay_log配置中继日志,默认采用 主机名-relay-bin 的方式保存日志文件 
relay_log=replicas-mysql-relay-bin
# log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
# 防止改变数据(只读操作,除了特殊的线程)
read_only=1

重启数据库

service mysqld restart

执行mysql语句

mysql:

change master to MASTER_HOST='192.168.0.23',MASTER_PORT=3306,MASTER_USER='root',MASTER_PASSWORD='tw369.com',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=156;
flush privileges;
start slave;/stop slave;
show slave status \G

确认结果

如果 Slave_IO_Running=YES、Slave_SQL_Running=Yes、Slave_IO_State=Waiting for master to send event 则表示成功

常见问题处理

show slave status \G

检查Last_Error的信息,在Master检索日志

mysqlbinlog --no-defaults -v -v --base64-output=DECODE-ROWS mysql-bin.000001 | grep -A '10' 55154294

手工干预处理后,忽略掉错误的一致性问题,重新开启同步

stop slave;set global sql_slave_skip_counter=1;start slave;show slave status\G;

如反复出现,类似于常见BUG,则忽略掉相关的错误

vim /etc/my.cnf

slave-skip-errors = 1032,xxxx,xxxx ....

重启服务

posted @ 2021-04-15 16:01  littlewrong  阅读(801)  评论(0编辑  收藏  举报