mysql主从复制

你离开我真会死。 提交于 2021-02-16 16:35:58

一、主从复制原理:

 

1、过程

1)<master>将数据写入数据文件,将sql语句写入binlog

2)<slave>通过IO 线程带着用户名、密码、读取的binlog日志名、位置连接到<master>。并取走所需的sql语句和binlog的位置信息。

3)IO Thread 将binlog的位置信息存入master info,将sql语句写入 relay log。

4)SQL Thread 从relaylog中取出sql语句,有mysql写入数据库文件。

2、作用:

    1)便于实现读写分离。 

    * 实时性高的数据在主服务器上查询

    2)备份可在从服务器上执行。

 

二、配置

(一)配置my.cof

1. <master>

#vim /etc/my.cnf
[mysqld]
server-id=150               #起个独有名字防止服务器混乱。
log-bin=mysql-bin          #/开启binlog日志,起个名字
binlog-format=mixed      #定义binlog日志格式

 

2.<slave>

打开relay log日志 。(必须)

打开binlog日志。(建议打开) 为以后数据丢失做准备。

 # vim /etc/my.cnf

 

sever-id=132
log-bin=mysql-bin
relay-log=mysql-relay
log-slave-updates		#让从服务器把更新的内容写到自己sql日志里

 

3、中继服务器

此处仅为示例,本实验中没有中继

 # vim /etc/my.cnf
[mysqld]
sever-id=132
log-bin=mysql-bin
relay-log=mysql-relay
log-slave-updates	
default-storage-engine=blackhole		#使用黑洞引擎只记录binlog日志,不写入数据库。

 

4、删除两台服务器以前的binlog日志(可选),重启服务。

 

(二)建立复制用户

主从上分别创建用户

> grant replication slave on *.* to rep@'%' identified by '123';   

(三)建立连接:

1.查看master状态:

> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      319 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

说明:取到日志位置为mysql-bin.000001 文件的319 位置

 

2、从库启动slave

1)配置master的地址、用户、密码、binlog位置

>change master to
            master_host='192.168.71.150',
            master_user='rep',
            master_password='123',
            master_log_file='mysql-bin.000001',
            master_log_pos=319;

 

2)启动slave

> start slave;
Query OK, 0 rows affected (0.00 sec)

3)验证主从状态

Slave_IO_Running、Slave_SQL_Running两个地方都是yes,表示IO线程和SQL线程都开启了。

mysql> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.71.150
                  Master_User: rep
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 319
               Relay_Log_File: mysql-relay.000002
                Relay_Log_Pos: 251
        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: 319
              Relay_Log_Space: 402
              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: 
1 row in set (0.00 sec)

 

【FAQ】

1、启动slave时报错

> start salve

Slave failed to initialize relay log info structure from the repository

【分析】

relay_log名被该server上的另一个mysql slave占用了。

【解决】

重置slave,原来幽灵slave被干掉了。

> reset slave;

 

2、IO x线程一直 Connecting

>show slave status;

.......

Slave_IO_Running: Connecting

Slave_SQL_Running: Connecting

.......

 

【分析】

链接master出错,无非网络、账号、密码三个原因

经检测,在从库容器访问主库没有问题。应该从库中配置的主库信息有误。

【解决】

以k8s兑付系统测试环境为例:

[master]

>show master status;

[slave]

>stop slave;

>reset slave;

>change master to;

master_host='10.254.20.93',

master_user='root',

master_password='40010355',

master_log_file='mysql-master-nfc1t-bin.000003',

master_log_pos=28259463;

>start slave;

 

 

 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!