MySql主从同步(Windows环境)
一、两台电脑配置及ip说明
A主机(作为主服务器)
环境:windows11、mysql5.7.37
ip:192.168.50.97
B主机(作为从服务器,由虚拟机vmware模拟,vmware设置的网络连接方式为桥接)
环境:window11、mysql5.5.37
ip:192.168.50.91
二、一些注意的事项
1、实验需要同步的数据名称为:mybatis
2、同步前需要在从服务器也创建相同的mybatis库及对应的表,确保A机子与B机子的两个库数据保持一致
3、为防止同步前A机子中mybatis库被写数据,可先锁表:
flush tables with read lock; #数据库只读锁定命令,防止导出数据库的时候有数据写入。unlock tables命令解除锁定
4、主从服务器配置文件中 server-id 都需要设置,而且确保两个值唯一,因为同步时需要用到唯一id
三、主数据的配置文件 my.ini
[mysqld] # 设置mysql的安装目录,也就是刚才我们安装的目录 basedir=D:\Program Files\mysql-5.7.37-winx64 # 设置mysql数据库的数据的存放目录,刚才创建的mysqldata目录 datadir=D:\Program Files\mysql\mysqldata # 设置默认使用的端口 port=3306 # 允许最大连接数 max_connections=200 # 允许连接失败的次数。这是为了防止有人试图攻击数据库 max_connect_errors=10 # 服务端使用的字符集 character-set-server=utf8mb4 # 数据库字符集对应一些排序等规则使用的字符集 collation-server=utf8mb4_general_ci # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB # 默认使用“mysql_native_password”插件作为认证加密方式 # MySQL8.0默认认证加密方式为caching_sha2_password default_authentication_plugin=mysql_native_password # 主从同步配置 Master端 #数据库唯一ID,主从的标识号绝对不能重复。 server-id=10 #开启bin-log,并指定文件目录和文件名前缀 log-bin=D:\logs\mysql\log\log-bin.log #需要同步的数据库。如果是多个同步库,就以此格式另写几行即可。如果不指明对某个具体库同步,就去掉此行,表示同步所有库(除了ignore忽略的库)。 binlog-do-db=mybatis #不同步mysql系统数据库。如果是多个不同步库,就以此格式另写几行;也可以在一行,中间逗号隔开。 binlog-ignore-db=mysql [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8mb4 [client] default-character-set=utf8mb4 port=3306
四、重启mysql服务
按照三配置完my.ini文件后,重启一下sql服务,然后去检查下设置的binlog文件夹下是否产生对应的日志文件

五、设置数据同步权限
mysql> grant replication slave,replication client on *.* to slave@'182.148.15.237' identified by "slave@123"; Query OK, 0 rows affected (0.02 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)--------------------------------------------------------------------------------
温馨提示:权限查看方式mysql> show grants;mysql> show grants for slave@'192.168.50.91';--------------------------------------------------------------------------------
六、从机 my.ini文件配置
[mysqld] # 设置mysql的安装目录,也就是刚才我们安装的目录 basedir=E:\MySQL\MySQL Server 5.7 # 设置mysql数据库的数据的存放目录,刚才创建的mysqldata目录 datadir=E:\MySQL\MySQL Server 5.7\data # 设置默认使用的端口 port=3306 # 允许最大连接数 max_connections=200 # 允许连接失败的次数。这是为了防止有人试图攻击数据库 max_connect_errors=10 # 服务端使用的字符集 character-set-server=utf8mb4 # 数据库字符集对应一些排序等规则使用的字符集 collation-server=utf8mb4_general_ci # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB # 默认使用“mysql_native_password”插件作为认证加密方式 # MySQL8.0默认认证加密方式为caching_sha2_password default_authentication_plugin=mysql_native_password #设置从服务器id,必须于主服务器不同 server-id=2 #启动MySQ二进制日志系统 log-bin=E:\MySQL\log\log-bin.log #需要同步的数据库名。如果不指明同步哪些库,就去掉这行,表示所有库的同步(除了ignore忽略的库)。 replicate-do-db=mybatis #不同步mysql系统数据库 replicate-ignore-db=mysql #跳过所有的错误错误,继续执行复制操作 slave-skip-errors=all [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8mb4 [client] default-character-set=utf8mb4 port=3306
七、配置完成后,同样重启 从机mysql服务
八、配置主从同步指令
mysql> stop slave; #执行同步前,要先关闭slavemysql> change master to master_host='192.168.50.91',master_user='slave',master_password='slave@123'; mysql> start slave;mysql> show slave status \G;
九、测试数据同步
1、在主库某个表插入一条记录
2、在从库查询目标表,检查数据是否同步
十、配置过程中出现的问题:
1、Failed to open optimizer cost constant tables

2、unknown variable 'server-id=2'

十一、参考文献:
https://www.cnblogs.com/kevingrace/p/6256603.html 推荐【linux下 主从同步配置】
https://www.cnblogs.com/kevingrace/p/6261111.html 第一篇的常见问题总结【linux环境常见问题总结】
https://www.cnblogs.com/kevingrace/p/6261091.html 【linux下主从同步检测工具】
https://www.cnblogs.com/edwardsun/p/3810446.html 【window下主从配置】
https://dianzubuluo.com/%E6%9C%AA%E5%91%BD%E5%90%8D/124763.html 【window下主从配置】

浙公网安备 33010602011771号