1、主库操作:
修改数据库配置文件
liunx的my.cnf文件; windows系统的my.ini文件
[mysqld]
# 最大链接数
max_connections=1000
#主库----start--- 同一局域网内注意要唯一
server-id=100
#开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
#记录的数据库(多数据库用逗号,隔开)
binlog-do-db = test
#忽略数据库 (多数据库用逗号,隔开)
binlog-ignore-db = test2
主库----end---
#以下为可选配置
#设置存储模式不设置默认
binlog_format=row
#日志清理时间
expire_logs_days=7
#日志大小
max_binlog_size=1000m
# 缓存大小
binlog_cache_size=4m
#最大缓存大小
max_binlog_cache_size=521m
命令:
#创建用户
GRANT FILE ON *.* TO 'test'@'%' IDENTIFIED BY '123456';
#赋权限
GRANT REPLICATION SLAVE ON *.* TO 'test'@'%' IDENTIFIED BY '123456';
#刷新
FLUSH PRIVILEGES;
#重启服务
service mysqld restart;
#查看是否设置成功
show master status;
注:test和123456设置为你自己的用户名密码
如果能看到类似信息,代表设置成功。主库完成操作。
2、从库操作
修改从库配置文件
[mysqld]
#从库----start---
#设置server_id,注意要唯一
server-id=101
#开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
# relay_log配置中继日志
relay_log=edu-mysql-relay-bin
# 配置是否写入自身bin-log。如果使用从库作为master再向下同步,必须填写
log-slave-updates=1
# 同步的模式
binlog-format=row
# 同步的库
replicate-do-db=test
# 同步的表
replicate-wild-do-table=test.tab1
replicate-wild-do-table=test.tab1
配置项说明:
replicate-do-db #设定需要复制的数据库(多数据库使用逗号,隔开)
replicate-ignore-db #设定需要忽略的复制数据库 (多数据库使用逗号,隔开)
replicate-do-table #设定需要复制的表
replicate-ignore-table #设定需要忽略的复制表
replicate-wild-do-table #同replication-do-table功能一样,但是可以通配符
replicate-wild-ignore-table #同replication-ignore-table功能一样,但是可以加通配符
replicate-rewrite-db #重写库名 用于主库和从库不一致的场景
注:server_id 和主库不能相同,保持唯一
命令:
#重启
service mysqld restart;
#停止同步
stop slave;
#配置同步信息
change master to master_host='192.168.0.1',master_port=308,master_user='test',master_password='123456',master_log_file='mysql-bin.000003', master_log_pos=153722;
# 开始同步
start slave;
#显示状态
show slave status;
如图,两个yes,代表设置成功。
问题记录
1. 都设置完成,查看也没问题。数据却没同步
原因:主库和从库数据库名称不一致。
解决方案:修改从库配置,重启;
#重命名数据库
replicate-rewrite-db = db1 -> db2
2. 只同步一条,第二条记录就不同步了,
原因:可能是没有设置忽略错误
解决方案: 查看是否配置略过错误:
slave-skip-errors=all