MYSQL主从配置
网上有很多类似的文章,测试了几个,发现出现的问题各不相同。整理记录一下。刚好最近有1台阿里云,1台腾讯云服务器可以测试。用一个电商小项目进行测试,有两个库,一个大库一个小库,大库有30个表左右,小库有10个表左右,分别同步这两个库。其实主机上有40个库。只同步这两个库。
跑了有2天了,同步没有问题。
环境配置
主数据库
mysql 5.7 、49.232.***.***
从数据库
mysql 5.7 、120.26.***.***
主数据库配置修改
[mysqld]
#lower_case_table_names=1 #忽略大小写
server-id=1 #服务器id (主从必须不一样),爱写啥写啥,别太离谱就行
log-bin=mysql-bin #打开日志(主机需要打开),这个mysql-bin也可以自定义,这里也可以加上路径
#作为主机的配置
binlog-do-db=faka3 #要给从机同步的库,如果是多个库,可以写多个命令
binlog-do-db=codepay
binlog-ignore-db=mysql #不给从机同步的库(多个写多行)
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
expire_logs_days=7 #自动清理 7 天前的log文件,可根据需要修改
重启主数据库
service mysqld restart
通过登录命令进入主数据库
测试是否开启成功
show variables like '%log_bin%';
创建从数据库访问主数据库的帐号,用于获取数据内容
-- % 可以修改成指定IP进行访问,如果是多个从库需要配置%
grant replication slave on *.* to '帐号'@'%' identified by '密码';
FLUSH PRIVILEGES; -- 刷新
获取主数据库同步状态
从数据库配置修改
[mysqld]
#lower_case_table_names = 1
server-id = 2 #不可以与主数据库的ID相同
slave_skip_errors = 1146,2003 #跳过出现的错误,继续执行复制
#slave_skip_errors = 2003
重启从数据库
service mysqld restart
通过登录命令进入从数据库,配置主数据库的登录信息,用于获取数据
change master to
master_host='主数据库IP',
master_user='slave123456',
master_password='password123456',
master_log_file='mysql-bin.000902',-- 根据主数据库状态中的日志File填写
master_log_pos=644; -- 根据主数据库状态中的Position填写
启动从数据库同步命令
-- 启动主从
start slave;
-- 停止主从
stop slave;
-- 查看状态
show slave status \G;
可能出现的错误,需要用到的命令(可能需要关闭同步)
-- server id冲突
set global server_id=8;
-- 解决日志冲突
change master to master_log_file='mysql-bin.000001',master_log_pos=154;
-- 拨针,跳过这一个错误
SET GLOBAL sql_slave_skip_counter =10;