Linux下搭建MySQL主从复制、主主复制-刘宇

Linux下搭建MySQL主从复制、主主复制-刘宇

  • 一、主从复制
    • 1、在两台数据库中分别创建数据库
    • 2、在主服务器进行如下配置:
    • 3、在从服务器进行如下配置:
    • 5、重启主服务器的mysqld服务并查看master状态
    • 6、重启从服务器并进行相关配置
  • 二、主主复制
    • 1、主主复制可能会出现的问题
    • 2、在两台数据库中分别创建数据库
    • 3、在第一台主服务器进行如下配置:
    • 3、在第二台主服务器进行如下配置:
    • 5、重启第一台主服务器的mysqld服务并查看master状态
    • 6、重启第二台服务器并进行相关配置

作者:刘宇
CSDN博客地址:https://blog.csdn.net/liuyu973971883
有部分资料参考,如有侵权,请联系删除。如有不正确的地方,烦请指正,谢谢。

一、主从复制

1、在两台数据库中分别创建数据库

#注意两台必须全部执行,数据库名根据需要自行定义。
create database test1;

2、在主服务器进行如下配置:

  • 修改my.cnf配置文件
vi /etc/my.cnf
  • 添加如下配置
#  id每台机器要不同
server-id = 1
#指定binlog与relay地址,也可不指定,不指定则使用默认名字放于默认路径,如果想指定名字如:
#log-bin = mysql-bin
log-bin = /software/mysql-5.7.17/log/mysql-bin
#传输格式,有row、statement、mixed三种格式
binlog-format=mixed
#同步的数据库名称
replicate-do-db=test1
#不要同步哪些库,较好的写法
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%

3、在从服务器进行如下配置:

  • 修改my.cnf配置文件
vi /etc/my.cnf
  • 添加如下配置
#  id每台机器要不同
server-id = 2
#指定binlog与relay地址,也可不指定,不指定则使用默认名字放于默认路径,如果想指定名字如:
#log-bin = mysql-bin
#relay-log = mysql-relay-bin
log-bin = /software/mysql-5.7.17/log/mysql-bin
relay-log = /software/mysql-5.7.17/log/mysql-relay-bin
#传输格式,有row、statement、mixed三种格式
binlog-format=mixed

5、重启主服务器的mysqld服务并查看master状态

#重启mysql服务
service mysqld restart
#登录mysql数据库
mysql -uroot -p
#查看master的状态
show master status;

在这里插入图片描述

6、重启从服务器并进行相关配置

#重启mysql服务
service mysqld restart
#登录mysql
mysql -uroot -p
#连接主服务器
change master to master_host='主服务器IP地址',master_user='root',master_password='root',master_port=3306,master_log_file='master-bin.000001',master_log_pos=154;
#启动slave,如果启动失败则需要reset slave,然后重新change连接
start slave
#查看slave的状态
show slave status \G
  • 出现下面两个yes代表成功了,此时在主服务器上对数据库test1的所有增删改查都可以被同步到从服务器上。
    Linux下搭建MySQL主从复制、主主复制-刘宇_第1张图片

二、主主复制

主主复制其实就是两个主从复制的关系

1、主主复制可能会出现的问题

主主复制中必须要解决的事情就是自增主键的问题。如果 MySQL1 主键 id 增加到 999 了,此时二进制数据还没到达 MySQL2,那么 MySQL2 恰好要插入数据,那么新数据主键 id 也是 999,那不就是乱套了么!解决这一问题我们可以直接更改MySQL中的配置文件中的auto_increment_increment和auto_increment_offset即可。

2、在两台数据库中分别创建数据库

#注意两台必须全部执行,数据库名根据需要自行定义。
create database test1;

3、在第一台主服务器进行如下配置:

  • 修改my.cnf配置文件
vi /etc/my.cnf
  • 添加如下配置
#  id每台机器要不同
server-id = 1
#指定binlog与relay地址,也可不指定,不指定则使用默认名字放于默认路径,如果想指定名字如:
#log-bin = mysql-bin
#relay-log = mysql-relay-bin
log-bin = /software/mysql-5.7.17/log/mysql-bin
relay-log = /software/mysql-5.7.17/log/mysql-relay-bin
#传输格式,有row、statement、mixed三种格式
binlog-format=mixed
#判断是否将获取到的同步数据分发到下面的从节点中去,如果需要则开启
#log_slave_updates = 1
auto_increment_increment=2 # 步进值auto_imcrement。一般有n台主 MySQL 就填n
auto_increment_offset=1 # 起始值。一般填第n台主MySQL。此时为第一台主MySQL
#同步的数据库名称
replicate-do-db=test1
#不要同步哪些库,较好的写法
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%

3、在第二台主服务器进行如下配置:

  • 修改my.cnf配置文件
vi /etc/my.cnf
  • 添加如下配置
#  id每台机器要不同
server-id = 2
#指定binlog与relay地址,也可不指定,不指定则使用默认名字放于默认路径,如果想指定名字如:
#log-bin = mysql-bin
#relay-log = mysql-relay-bin
log-bin = /software/mysql-5.7.17/log/mysql-bin
relay-log = /software/mysql-5.7.17/log/mysql-relay-bin
#传输格式,有row、statement、mixed三种格式
binlog-format=mixed
#判断是否将获取到的同步数据分发到下面的从节点中去,如果需要则开启
#log_slave_updates = 1
auto_increment_increment=2 # 步进值auto_imcrement。一般有n台主 MySQL 就填n
auto_increment_offset=2 # 起始值。一般填第n台主MySQL。此时为第二台主MySQL
#同步的数据库名称
replicate-do-db=test1
#不要同步哪些库,较好的写法
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%

5、重启第一台主服务器的mysqld服务并查看master状态

#重启mysql服务
service mysqld restart
#登录mysql数据库
mysql -uroot -p
#查看master的状态
show master status;

在这里插入图片描述

6、重启第二台服务器并进行相关配置

#重启mysql服务
service mysqld restart
#登录mysql
mysql -uroot -p
#连接服务器,填写对面主服务器的信息
change master to master_host='第一台主服务器IP地址',master_user='root',master_password='root',master_port=3306,master_log_file='master-bin.000001',master_log_pos=154;
#启动slave,如果启动失败则需要reset slave,然后重新change连接
start slave
#查看slave的状态
show slave status \G
  • 出现下面两个yes代表成功了,此时在主服务器上对数据库test1的所有增删改查都可以被同步到从服务器上。
    Linux下搭建MySQL主从复制、主主复制-刘宇_第2张图片
    随后将反过来再重复第五步和第六步即可。

你可能感兴趣的:(MySQL)