分库分表教程(Sharding-JDBC) -06

一. 配置MySQL数据库主从同步

系统环境:Linux

MySQL版本:5.7    注意:主从数据库MySQL版本务必保持一致

具体概括为以下操作步骤

1)开启master的二进制日志

2)开启slave的二进制日志

3)将slave指向master

4)开始复制

1.1 开启master二进制日志

1)编辑mysql配置文件

vi /etc/my.cnf

2)添加二进制日志配置,开启二进制(mysql-bin只是二进制日志名称,可以自行指定)

server-id=1             #id是一定要指定的,是唯一的标识(master数据库要比slave数据库的id优先级高才行)
log-bin=mysql-bin       #开启二进制日志

3)授权

登录数据库,需要给slave数据库配置一个用户/密码的权限

允许某个ip地址的某个用户以某个密码对当前数据库的所有库和表进行复制操作

mysql> grant replication slave on *.* to 'root'@'slave数据库ip' identified by '密码';

PS:如果在重置密码时提示 如下错误:

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

主要原因是当前设置的密码不符合规则,设置为8位长度并包含大小写字母及特殊符号即可,或者修改密码规则,具体自行Google

配置之后需要刷新权限

mysql> flush privileges;

上面修改配置文件需重启服务

service mysqld restart

4)查看master的状态

mysql> show master status;

file:是日志文件名称

position:日志所在位置

1.2 开启slave的二进制日志

登录slave服务器

1)配置my.cnf配置文件

vi /etc/my.cnf

2)添加slave二进制日志配置,开启二进制(mysql-bin只是二进制日志名称,可以自行指定)

server-id=2
log-bin=mysql-bin

注意:每一台指定唯一的一个server-id标识

修改完配置服务需重启服务

service mysqld restart

3)配置slave指向master

mysql> change master to
    -> master_host='master数据库ip',
    -> master_user='master授权账号',
    -> master_password='授权密码',
    -> master_log_file='master日志文件(例:mysql-bin.000001)',
    -> master_log_pos=master日志所在位置(例:1250);

master的日志文件名称可以在master数据库使用show master status;查看到

1.3 开启主从复制

 在slave服务器上执行

mysql> start slave;

查看slave运行状态

mysql> show slave status\G;

可看到如下内容

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 106.53.73.200
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 154
               Relay_Log_File: VM_0_16_centos-relay-bin.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000001
             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: 154
              Relay_Log_Space: 536
              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: 1
                  Master_UUID: f8100725-c3e5-11e9-ae45-525400da2f1f
             Master_Info_File: /var/lib/mysql/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

能查看到这两个为yes则表示成功

Slave_IO_Running: Yes #表示slave的日志读取线程开启 

Slave_SQL_Running: Yes #表示SQL执行线程开启

如果出现不同步情况参考网址:https://blog.csdn.net/heng_ji/article/details/51013710

1.4 配置需要同步的数据库以及不需要同步的数据库

1)停止Master服务

service mysqld stop

2)修改配置文件

vim /etc/my.cnf

增加如下内容

binlog_do_db=myslave # 如果需要同时同步多个数据库,请另起一行设置binlog_do_db=需要同步的数据库名称 binlog_ignore_db=mysql # 不想同步的数据库

1.5 补充内容 

我在后续的教程中使用到了本次教程创建的主从数据库,但是我发现数据同步功能失效

排查了一下,发现是Slave_SQL_Running变成了No,那么如何解决呢?

解决办法如下:

登录数据库 mysql -u账号 -p (写给小白的 我太贴心)
执行如下命令:
MariaDB [(none)]> stop slave;                                                      
MariaDB [(none)]> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;            
MariaDB [(none)]> start slave;                                                      
MariaDB [(none)]> show slave status\G 

如果是slave_io_running:no 

解决办法如下:

1、查看主服务器

MariaDB [(none)]> show master status\G 

2、在从服务器上查看

问题所在:发现Master_Log_File没有对应

3、在出现Slave_IO_Running: No的机器上操作

MariaDB [(none)]> slave stop;                 
MariaDB [(none)]>CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000026', MASTER_LOG_POS=0;  
MariaDB [(none)]> slave start;                               
MariaDB [(none)]> show slave status\G

问题解决 ~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值