linux系统mysql主从配置

一、原理

linux系统mysql主从配置及uuid修改、问题解决

mysql主从配置的流程大体如图:

1)master会将变动记录到二进制日志里面;

2)master有一个I/O线程将二进制日志发送到slave;

3) slave有一个I/O线程把master发送的二进制写入到relay日志里面;

4)slave有一个SQL线程,按照relay日志处理slave的数据;

 

二、操作步骤

按照原理,我们开启mysql主从复制,我们大体需要做以下操作:

1)开启master的二进制日志

2)开启slave的二进制日志

3)将slave指向master

4)开始复制

 

三、开启master二进制日志

1)编辑mysql的配置文件,使用命令:

vim /etc/my.cnf

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

log-bin=master-bin
server-id=1

注意:server-id是要指定的,不然会报错,每一台指定一个唯一标识符

 

四、授权

我们需要给slave配置一个用户/密码的权限

mysql>GRANT REPLICATION SLAVE ON *.* TO '用户名'@'slave数据库的IP地址' IDENTIFIED BY '密码';

这行命令的意思是:允许在某个IP地址的某个用户某个密码当前数据库所有库所有表进行复制操作

注意:以上配置了权限,我们需要刷新以下权限使用命令:

 

mysql>flush privileges;

或者直接重启mysql服务: 五、查看以下master的状态

其实主要是查看以下master的日志文件名字,以及文件所在的位置,使用命令:

show master status;

可以看到类似如下信息:

+-------------------+----------+--------------+------------------+-------------------+

| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+-------------------+----------+--------------+------------------+-------------------+

| master-bin.000001 |     1516 |              |                  |                   |

+-------------------+----------+--------------+------------------+-------------------+

 

File: 日志文件名称

Position: 日志所在位置

 

六、开启slave的二进制日志

进入slave的服务器

1)编辑mysql的配置文件,使用命令:

vim /etc/my.cnf

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

log-bin=relay-bin
server-id=2

注意:server-id是要指定的,不然会报错,每一台指定一个唯一标识符

 

七、将slave指向master

mysql>CHANGE MASTER TO >MASTER_HOST='master所在服务器的IP', >MASTER_USER='master授权的账号', >MASTER_PASSWORD='master授权的密码', >MASTER_LOG_FILE='master的日志文件名', >MASTER_LOG_POS=master的日志所在位置;

八、开始主从复制

在slave上执行

mysql>start slave;

我们可以查看slave的运行状态:

show slave status\G;

可以看到类似如下内容:

*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: master的IP地址
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-bin.000001
          Read_Master_Log_Pos: 1516
               Relay_Log_File: slave-bin.000004
                Relay_Log_Pos: 1117
        Relay_Master_Log_File: master-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
......    

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

Slave_SQL_Running: YES 表示SQL执行线程开启

如果有主从复制有错误信息其实也可以看到

九、测试

以上我们就将主从复制功能设置完毕了,我们可以通过在master里面创建数据库,或者表,插入数据等来测试一下

 

十、注意点

1)开启了主从复制,slave库如果写入数据的话,可能导致数据回滚从而主从复制线程中断,可以通过以下方式解决:

mysql> stop slave;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave;

2)如果要停止slave的复制可以使用命令:

mysql>stop slave;

3)由于主从复制是基于I/O的日志,所以会存在一定延时,如果对数据一致性要求非常高的话,简单的主从复制在实际环境中会存在问题 

 

参考文章:

1)https://www.cnblogs.com/phpstudy2015-6/p/6485819.html#_label0

2)https://www.linuxidc.com/Linux/2014-02/96945.htm

 

在主从复制的时候如果第二个虚拟机是复制过去的,需要修改uuid

https://blog.csdn.net/pratise/article/details/80413198

  1. 首先要查找到mysql的安装地址
    show variables like ‘datadir’;

±--------------±----------------+
| Variable_name | Value |
±--------------±----------------+
| datadir | /var/lib/mysql/ |
±--------------±----------------+
1 row in set (0.00 sec)

//然后通过mysql生成一个uuid进行记录等会用于修改
select uuid()

±-------------------------------------+
| uuid() |
±-------------------------------------+
| 2674149f-5083-11e8-be4b-080027a1f331 |
±-------------------------------------+

  1. 然后进入datadir目录
    cd /var/lib/mysql/
    vi auto.cnf
    //修改server-uuid
    1
    2
    3
    3.重启mysql
    service restart mysqld

相关文章:

  • 2021-12-21
  • 2021-07-19
  • 2021-06-15
  • 2022-12-23
  • 2021-10-27
  • 2021-12-15
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-11-29
  • 2022-02-28
  • 2021-05-30
  • 2021-11-20
  • 2022-12-23
  • 2022-12-23
  • 2021-11-29
相关资源
相似解决方案