一 环境
由于开发需要,需要两台服务器进行负载均衡,两台服务器配置完全相同,均为windows server 2012,且MySQL数据库版本为Mysql5.6,连接工具使用Navicat Premium 12,使用默认安装。 MySql数据库配置文件 My.ini 位于C:\ProgramData\MySQL\MySQL Server 5.6。 假设两台服务器IP分别为:192.168.1.101,192.168.1.102 注意,在以下操作中最好不要有数据的读写,且保证两台服务器上要同步的数据库完全一致
二 主从同步
1.主服务器配置
我们以192.168.1.101为主服务器,以192.168.1.102为从服务器,让102服务器主动来同步101上的内容。 一般情况下,我们使用数据库的二进制日志文件来同步数据。 1.打开主服务器的mysql数据库配置文件my.ini,找到server-id=1这部分内容,在后面添加对应的内容。
# 数据库服务ID,同步时保证不重复即可
server-id=1
# 需要记录日志的数据库,这里记录test数据库的日志,有多个数据库时再来一条即可
binlog-do-db=test1
# 需要同步数据的数据库
replicate-do-db=test1
# 不需要同步数据的数据库,有多个数据库时再来一条即可,如果没有则可以不用
replicate-ignore-db=mysql1
# replicate-ignore-db=mysql2
# 日志文件的名称
log-bin=mysql_log_bin
修改完成之后保存,然后重启MySQL服务,使用命令或者在服务中重启都可以
net stop MySQL56
net start MySQL56
重启完成之后在MySql终端使用 show master status 查看状态 此处记录下 File 和 Position 的值,分别为 mysql_log_bin.000001 和 157,这两个值是同步成功的关键。 一切就绪好之后,需要添加一个允许进行数据库同步的用户,当然也可以使用其他拥有同步权限的账号,但是这里不推荐,建议创建一个只有同步权限且仅允许要同步的服务器访问。这里添加一个仅允许 192.168.1.102 访问且只有同步权限的用户。
grant replication slave on *.* to 'backuser'@'192.168.1.102' identified by '123456';
flush privileges;
在mysql8.0版本中,下列的SQL语句无法执行,需要拆分成两句
create user 'backuser'@'192.168.1.102' identified by '123456';
grant replication slave on *.* to 'backuser'@'192.168.1.102';
flush privileges;
也可以在数据库连接工具中直接添加,只要赋予对应的权限即可,我是用的是Navicat Premium 12 至此,主服务器配置完成
2.从服务器配置
1.打开192.168.1.102的数据库配置文件 my.ini,找到 Server Id 节点,修改为以下内容
# Server Id. 保证不和另一台服务器的Server Id重复即可
server-id=2
# 要同步的数据库
replicate-do-db=test1
# 中继日志,一般情况下它在MySQL主从同步读写分离集群的从节点才开启
relay-log=mysqld-relay-bin
修改完成之后保存,重启数据库服务,然后使用 sql 语句设置需要同步的数据库的信息
CHANGE MASTER TO
MASTER_HOST='192.168.1.101',
MASTER_USER='backuser',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql_log_bin.000001',
MASTER_LOG_POS= 157;
记录的 FILE 的值就是此处 MASTER_LOG_FILE 的值,Position 的值就是此处 MASTER_LOG_POS 的值。 注意,运行前最好再去主服务器上运行 show master status 查一下 Position 的值,如果设置期间数据库发生过变化,这个值也会变化。 如果已经存在进行中的同步,则先运行 stop slave 停止,再运行以上内容。 最后使用 start slave 开启同步即可。
STOP SLAVE;
START SLAVE;
show slave status
以上步骤全部完成时,使用 show slave status 查看同步的状态。 注意这里File的名称已经发生变化
如果在cmd窗口中时,则可以使用 show slave status\G; 来查看同步的状态
如果 Slave_IO_Running 和 Slave_SQL_Running 的值均为 Yes,则说明数据库主从同步的设置已经完成。 如果不是的话,无非就是密码不对或者Pos值不对,再或者防火墙拦截等原因,仔细检查一下即可解决。 以上内容可用于数据库读写分离时,主数据库负责写入数据,从数据库负责读数据
二 双向同步
双向同步即在主从同步的基础上调换角色再设置一遍即可,两台服务器互为主从。
三 后记
部分细节描述的不够详细,后边有机会再补充。 过程中踩到很多坑,各种搜搜搜,最终以自己的理解编辑一篇,方便查阅。
|