MYSQL5.7.28 本地 CentOS7和Windows10 主从同步搭建

1 前置准备:

数据库版本:

mysql 5.7.28

系统信息:

主库 master 本地虚机 CentOS7  192.168.146.3

从库  slave 本地电脑 windows10  192.168.199.221

2 master主库配置(在Centos7操作)

2.1 编辑主库配置文件

 vim /etc/my.cnf
server-id=1 #设置主服务器的ID(不能和别的服务器重复,建议使用ip的最后一段)
innodb_flush_log_at_trx_commit=2  #可以配置的值:0/1/2; 0、效率最高,最不安全;1、最安全,但是效率最低;2、安全和效率平衡的取舍,在服务器系统挂掉的情况下会丢失数据;
sync_binlog=1  #,值可设置 1、500、1000;可自己根据测试性能配置
log-bin=mysql-bin  #binlog日志文件名
binlog-ignore-db=mysql # 表示不同步mysql库
binlog-ignore-db=information_schema # 表示不同步information_schema库
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
binlog-do-db=xxxx  # 这个表示只同步某个库 (如果没有此项,表示同步所有的库)

2.1 创建主从同步账号

#登录master MySQL 
$ mysql -u root -p    
mysql> create user 'Sync'@'%' identified by 'Sync@0000'; # 5.7要求密码必须含有大小写英文,符号和数字
mysql> grant FILE on *.* to 'Sync'@'192.168.199.221' identified by 'Sync@0000'; #赋予FILE权限,允许从从库ip访问主库二进制日志文件bin-log
mysql> grant replication slave on *.* to 'Sync'@'192.168.199.221' identified by 'Sync@0000'; #赋予主从同步权限
mysql> flush privileges;

2.2 重启master MySQL,使my.cnf 配置生效;查看主库状态:

$ service mysqld restart #重启MySQL
mysql -u root -p
mysql> show master status; #查看主库的状态  file,position 这两个值很有用,记一下;需要放到slave配置中
+------------------+----------+--------------+-------------------------------------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB                                | Executed_Gtid_Set |
+------------------+----------+--------------+-------------------------------------------------+-------------------+
| mysql-bin.000007 |      154 |              | mysql,information_schema,sys,performance_schema |                   |
+------------------+----------+--------------+-------------------------------------------------+-------------------+
1 row in set (0.00 sec)

3 slave 从库配置(Windows10 上操作)

 3.1 假如从库位于Linux系统 ,本次搭建没有涉及,贴上参考。

# 从库位于Linux系统的配置信息

vim /etc/my.cnf

server-id=111 
#log-bin=mysql-bin #从库提高性能可以不开bin-log日志
replicate-ignore-db=mysql  #配置不需要复制的库mysql
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
replicate-ignore-db=sys
replicate_do_db=python #标记出需要同步的数据库名,在多从配置时可以按需配置
innodb_flush_log_at_trx_commit=2 # 可以配置的值:0/1/2; 0、效率最高,最不安全;1、最安全,但是效率最低;2、安全和效率平衡的取舍,在服务器系统挂掉的情况下会丢失数据;
sync_binlog=1000 # 每进行n次事务提交之后,MySQL将binlog_cache中的数据强制写入磁盘。
slave_parallel_workers=4 #根据实际情况决定开启多少个线程用于主从复制
slave_parallel_type=logical_clock #基于组提交的并行复制方式
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON

  3.2 此次搭建从库位于Windows10 

   进入到MySQL的安装目录找到my.ini文件 打开

   Note:  这server-id要写在默认字符编码上面
    否则报错 mysql: [ERROR] unknown variable 'server-id=2'
    参考:https://blog.csdn.net/zcbdandan/article/details/89500578

[mysqld]
port = 3306
basedir=D:/Program Files/mysql-5.7.28-winx64
datadir=D:/Program Files/mysql-5.7.28-winx64/data
max_connections=200
character-set-server=utf8
default-storage-engine=INNODB
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

# server-id  

server-id=2 
[mysql]
default-character-set=utf8

键盘:win+r 输入services.msc 进入服务 右键重启MySQL服务

3.3  进入Windows10从服务器数据库进行配置


$ mysql -u root -p #登录slave mysql
mysql> stop slave; #关闭从库
mysql> change master to master_host='192.168.146.3', master_user='Sync' ,master_password='Sync@0000', master_log_file='mysql-bin.000007' ,master_log_pos=154; #配置主库信息
mysql> start slave; #开启从库 
mysql> show slave status \G; 

# Slave_IO_Running,Slave_SQL_Running 都为Yes的时候表示配置成功;
# 可以在主库上对数据进行操作,再在从库上刷新是否同步;
mysql> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.146.3
                  Master_User: Sync
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000007
          Read_Master_Log_Pos: 437
               Relay_Log_File: LAPTOP-BI7VE0KG-relay-bin.000003
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000007
             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: 437
              Relay_Log_Space: 986
              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: 110
                  Master_UUID: 12365c61-1015-11ea-8c51-000c29023405
             Master_Info_File: D:\Program Files\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:
1 row in set (0.00 sec)

ERROR:
No query specified

mysql>

上图 是搭建成功的信息

4 Troubleshooting:

4.1 Last_IO_Error: Master command COM_REGISTER_SLAVE failed: Access denied for user 'Sync'@'%' (using passwo

 分析:权限问题

mysql> show grants for 'Sync'@'%';
+----------------------------------------------+
| Grants for Sync@%                            |
+----------------------------------------------+
| GRANT USAGE SLAVE ON *.* TO 'Sync'@'%' |
+----------------------------------------------+

Solution:登陆主库修改权限 然后登陆从服务器 stop slave,然后start salve

mysql> GRANT REPLICATION SLAVE ON *.* TO  'Sync'@'%' identified by 'Sync@0000';
mysql> show grants for 'Sync'@'%';
+----------------------------------------------+
| Grants for Sync@%                            |
+----------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO 'Sync'@'%' |
+----------------------------------------------+

4.2 网络不通  主从库IP是否互相ping得通


4.3.账户密码错误

  本次搭建过程就把同步的账户密码写错了,所以是连接不上主服务器的,修改密码也麻烦,直接drop user,新增一个用户。
4.4 防火墙是否关闭 


4.5 mysql配置文件问题 

  server-id 设置有规律,主从要不一样。
4.6 pos不正确 

     设置从库的位置信息一定要和主服务器下show master status bin-log的名称和位置信息完全一致,要不从服务器 
     slave_IO线程读取不到主服务器bin-log,它存着主库的数据更改操作记录。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值