以mysql5.7版本数据库为例:
master ip: 192.168.10.5
slave ip: 192.168.10.6
一、 Master 上的配置:
1.修改mysql数据库配置文件my.ini,存放路径一般在C:\ProgramData\MySQL\MySQL Server 5.7,(C盘中ProgramData目录默认隐藏),自定义路径的例外。修改内容:
# master服务唯一标识
server-id = 1
# 二进制同步数据文件
log-bin = mysql-bin (mysql-bin自定义)
#binlog_do_db 指定记录二进制日志的数据库,即需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可。
binlog-do-db = testDB(test是你要同步的数据库,多个数据库请重复设置binlog-do-db )
配置完,重启mysql服务
2.登录mysql数据库 为主从同步新建一个用户,并赋予主从同步授权
create user 'backup'@'192.168.10.6' identified by '123456';
grant replication slave on *.* to 'backup'@'192.168.10.6' identified by '123456';
flush privileges;
二、 Slave 上的配置:
1.修改my.ini配置文件
server-id=2 #不能和master一样
relay-log=slave-relay-bin
relay-log-index=slave-relay-bin.index
#relay-log 启动MySQL二进制日志,可以用来做数据备份和崩溃恢复,或主服务器挂掉了,将此从服务器作为其他从服务器的主服务器。
#replicate-do-db 指定同步的数据库,如果复制多个数据库,重复设置这个选项即可。若在master端不指定binlog-do-db,则在slave端可用replication-do-db来过滤。
#replicate-ignore-db 不需要同步的数据库,如果有多个数据库,重复设置这个选项即可。
配置完成后重启mysql服务
2.先停止slave
stop slave;
3.在master上执行
show master status;
记录File和Position;
4.在slave上执行一下sql,MASTER_LOG_FILE=主数据File,MASTER_LOG_POS=主数据库Postition;
change MASTER to MASTER_HOST='master 的ip',MASTER_PORT=3306,MASTER_USER='backup',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=49213;
执行成功后,
start slave;
查看slave状态
show slave status \G
二者均为YES表示主从配置成功。
验证一下,在master上同步的数据库新建一个表,看slave库中是否有该表。
##其他情况:
1.如果主库已有数据的情况新增从库,在以上stop slave;步骤之后,
2.master上停止mysql服务(如果不能停服,请执行一下语句)
3.锁定所有表:flush tables with read lock;(此时数据库处于只读状态)
4.查看状态:show master status; 记录File和Position
5.将master上的data目录下要同步数据库文件夹拷贝到slave的data目录中,master上ibdata1文件也拷过去,覆盖注意备份一下
6.从库执行,注意替换第四步记录的File和Position
change MASTER to MASTER_HOST='master 的ip',MASTER_PORT=3306,MASTER_USER='backup',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=49213;
7.start slave;
8.show slave status;状态是否正常
9.解锁master上的表:unlock tables;
10.验证
问题:
配置过程中我遇到一个问题;
Slave_SQL_Running为NO
有个表记录报错,我这里在my.ini配置文件里加slave-skip-errors直接错误跳过了,然后就好了。
以上就是我的配置过程,希望对你有帮助。