mysql主从同步

mysql实现主从同步,需开启binlog日志。
binlog日志开启方式

1、配置文件

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
#设置3306端口
port = 3306
[mysqld]
log-bin=E:/mysql/mysql-5.7.28-winx64/data/mysql-bin/mysql-bin 	#指定文件名和路径,这里是绝对路径
binlog-format=Row   #文件类型
#设置binlog清理时间
expire_logs_days = 14
#binlog每个日志文件大小
max_binlog_size = 100m
#binlog缓存大小
binlog_cache_size = 4m
#最大binlog缓存大小
max_binlog_cache_size = 512m
#server_id 主从数据库不能相同
server_id=106
# 设置mysql的安装目录
basedir= E:/mysql/mysql-5.7.28-winx64
# 设置mysql数据库的数据的存放目录
datadir= E:/mysql/mysql-5.7.28-winx64/data
# 允许最大连接数
max_connections=20000
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 最大允许的数据包大小
max_allowed_packet=200M
#大小写不敏感
lower_case_table_names=2
此处配置时完成遇到的坑
(原因不明)如果在winserver 2019下修改配置文件会导致mysql服务无法启动。
	解决方法通过本地电脑修改后,将my.ini配置文件直接复制覆盖再运行。

2、配置完成启动后,就要通过从服务器连接主服务

数据库操作命令

1)首先连接主数据库 mysql -hlocalhost -uroot -p123456
2)查询主数据库 ,记录file  
 mysql>show master status;
   +------------------+----------+--------------+------------------+
   | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
   +------------------+----------+--------------+------------------+
   | mysql-bin.000001 |      308 |              |                  |
   +------------------+----------+--------------+------------------+
   1 row in set (0.00 sec)
3)配置从数据库连接
   mysql>change master to master_host='192.168.145.222',master_user='root',master_password='123456',
         master_log_file='mysql-bin.000001',master_log_pos=308;   //注意不要断开,308数字前后无单引号。
   Mysql>start slave;    //启动从服务器复制功能

4)查询从数据库运行状态。
 mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 110.41.47.15
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 70333047
               Relay_Log_File: WIN-RQHQ79863LQ-relay-bin.000009
                Relay_Log_Pos: 694
        Relay_Master_Log_File: mysql-bin.000001
        #这两个参数YES代表运行成功
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 70333047
              Relay_Log_Space: 2573
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
#这里查看报错信息
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 106
                  Master_UUID: 9455ea88-bf5e-11ee-9c14-fa163e419979
             Master_Info_File: D:\mysql\mysql-5.7.28-winx64\data\master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:

3、配置可能遇到的坑

通常我们都是将正式环境的copy过来进行配置从数据库,当我们启动slave时可能会出现  Slave_IO_Running: NO
可能由于复制过来的主从两个数据库 UUID相同,可以使用函数uuid();重新生成,然后复制到DATA文件下 auto.cnf文件中。
#可能由于复制过来的主从两个数据库 UUID相同, 
Slave_IO_Running: NO
mysql> select uuid();
+--------------------------------------+
| uuid()                               |
+--------------------------------------+
| 48d16720-1123-11ef-ad7e-6c3c8c747531 |
+--------------------------------------+
1 row in set (0.01 sec)
#文件内容,将UUID替换
[auto]
server-uuid=9455ea88-bf5e-11ee-9c14-fa163e419979

注意:从数据库开启后不能直接对从数据库进行写入操作,可能造成同步失败,表现为 Slave_SQL_Running: No

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 110.41.47.15
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 70330803
               Relay_Log_File: WIN-RQHQ79863LQ-relay-bin.000007
                Relay_Log_Pos: 68877181
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: No
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 1032
                   Last_Error: Could not execute Update_rows event on table hxrdp.hxrdpsystem_tb_user; Can't find record in 'hxrdpsystem_tb_user', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.000001, end_log_pos 69231846
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 69231216
              Relay_Log_Space: 69977525
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 1032
               Last_SQL_Error: Could not execute Update_rows event on table hxrdp.hxrdpsystem_tb_user; Can't find record in 'hxrdpsystem_tb_user', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.000001, end_log_pos 69231846

可以通过执行以下命令修复
mysql> stop slave ;
Query OK, 0 rows affected (0.01 sec)

mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
Query OK, 0 rows affected (0.01 sec)

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MySQL主从同步是一种数据复制机制,用于将一个MySQL数据库实例中的数据自动复制到其他MySQL数据库实例,从而实现数据的备份、负载均衡和故障恢复等功能。 在主从同步中,一个MySQL实例被配置为主服务器(Master),而其他实例被配置为从服务器(Slave)。主服务器负责接收和处理客户端的写操作,然后将这些操作记录到二进制日志(Binary Log)。从服务器连接到主服务器,并通过读取主服务器的二进制日志来复制这些操作。从服务器将这些操作应用到自己的数据上,以保持与主服务器数据的一致性。 配置MySQL主从同步需要进行以下步骤: 1. 确保主服务器和从服务器之间可以互相通信。 2. 在主服务器上开启二进制日志功能,并配置二进制日志文件的位置和名称。 3. 在主服务器上创建一个用于复制的用户,并为该用户授予复制权限。 4. 在从服务器上配置复制参数,包括指定主服务器的IP地址、连接用户名和密码等。 5. 启动从服务器,并连接到主服务器进行复制。 6. 监控主从同步过程,确保数据的一致性和同步性。 需要注意的是,在配置主从同步时,需要考虑网络延迟、带宽和硬件性能等因素,以确保同步过程的效率和稳定性。另外,主从同步只能复制数据更改操作(如插入、更新、删除),而不能复制结构变更操作(如创建表、修改表结构)。如果需要同步结构变更,可以使用其他工具或方法来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贪玩的小金魚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值