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;   #执行同步前,要先关闭slave
mysql> 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

  操作还原:在本地安装mysql后,启动时启动不起来,报这个错误
  原因:新安装的数据库data文件夹下确实红色方框的数据库文件,直接拷贝到目标库data文件夹下即可

   

  2、unknown variable 'server-id=2'

  原因:不论Master 或者是 Slave,都需要配置信息 加到以下配置信息之前
  

 

 

 

十一、参考文献:

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下主从配置】

 

posted @ 2023-07-24 22:18  狼窝窝  阅读(1564)  评论(0)    收藏  举报