两主两从配置(mariaDB)

配置四台机器,其中AB为双主互从,C是A的从机,D是B的从机,本文中配置监视所有数据库

具体配置文件解析参考https://yukisrye.top/index.php/archives/18/

优先配置两主互从
再次备注:数据库的创建要在配置主从复制之前

IP
A : master1169.69.85.111A和B互为主从
B : master2169.69.85.112A和B互为主从
C : slave3169.69.85.113A的从
D : slave4169.69.85.114B的从

安装mariadb和关闭防火墙:

yum install -y mariadb*

systemctl stop firewalld
setenforce 0

systemctl start mariadb
mysql_secure_installation  #执行数据库安装程序,我设置的root密码为123456

修改配置文件后不要退出数据库,否则会重新生成状态

主库1配置

vim /etc/my.cnf  #修改配置文件

[mysqld]
....
log-bin=mysql-bin   #启动二进制日志
relay-log=mysql-relay-bin  #启用中继日志
server-id=1    #服务器唯一ID 0--65535范围 

binlog-ignore-db=mysql      #设置不需要复制到从库的数据库名字
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys

replicate-ignore-db=mysql  #设置不需要从主库复制的数据库名字
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
replicate-ignore-db=sys

log-slave-updates=1  #开启联等备份

auto_increment_increment=2    #自增值的偏移量
auto_increment_offset=1     #自增值的增量

character_set_server=utf8    #设定默认字符集为utf8
collation_server=utf8_general_ci   #设定默认校对规则为utf8_general_ci

service mariadb restart #重启mariadb使配置文件生效

#创建远程用户
MariaDB [(none)]> CREATE USER 'slave'@'%' IDENTIFIED BY '123456';  #创建用户slave
MariaDB [(none)]> grant REPLICATION SLAVE on *.* to 'slave'@'%' identified by '123456'; #给予slave权限

MariaDB [(none)]> flush privileges;    #刷新
MariaDB [(none)]> create database test1;  #创建数据库

主库2配置

vim /etc/my.cnf  #修改配置文件

[mysqld]
....
log-bin=mysql-bin   #启动二进制日志
relay-log=mysql-relay-bin  #启用中继日志
server-id=2    #服务器唯一ID 0--65535范围 

binlog-ignore-db=mysql      #设置不需要复制到从库的数据库名字
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys

replicate-ignore-db=mysql  #设置不需要从主库复制的数据库名字
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
replicate-ignore-db=sys

log-slave-updates=1  #开启联等备份

auto_increment_increment=2    #自增值的偏移量
auto_increment_offset=1     #自增值的增量

character_set_server=utf8    #设定默认字符集为utf8
collation_server=utf8_general_ci   #设定默认校对规则为utf8_general_ci

service mariadb restart #重启mariadb使配置文件生效

#创建远程用户
MariaDB [(none)]> CREATE USER 'slave'@'%' IDENTIFIED BY '123456';  #创建用户slave
MariaDB [(none)]> grant REPLICATION SLAVE on *.* to 'slave'@'%' identified by '123456'; #给予slave权限

MariaDB [(none)]> flush privileges;    #刷新
MariaDB [(none)]> create database test1;  #创建数据库

配置两主互从

mysql -u root -p123456     #登录进入master1的mariadb

#对于之前没有配置过主从复制的服务器来说,可以跳过这两步
(可选)MariaDB [(none)]> stop slave; #停止从服务器复制功能
(可选)MariaDB [(none)]> reset master;  #重新配置主从

MariaDB [(none)]>show master status;   #查询master的状态,查询后就不要做更改,以免数据变化
+------------------+----------+--------------+-------------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB                                |
+------------------+----------+--------------+-------------------------------------------------+
| mysql-bin.000003 |      245 | master1      | mysql,information_schema,performance_schema,sys |
+------------------+----------+--------------+-------------------------------------------------+
# File:数据库的bin文件
Position:位点
Binlog_Do_DB:做备份的数据库
Binlog_Ignore_DB:不做备份的数据库

登录另一台主机

mysql -u root -p123456     #登录进入master2的mariadb

(可选)MariaDB [(none)]> stop slave; #停止从服务器复制功能
(可选)MariaDB [(none)]> reset master;  #重新配置主从

MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='169.69.85.111', #主机的IP地址
MASTER_USER='slave', #登录的用户名
MASTER_PASSWORD='123456',
MASTER_PORT=3306, #连接的端口
MASTER_LOG_FILE='mysql-bin.000003', #日志具体数字
MASTER_LOG_POS=245; #位点具体值

#下面这段没有注释便于修改
CHANGE MASTER TO MASTER_HOST='169.69.85.111',MASTER_USER='slave',MASTER_PASSWORD='123456',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=245
MariaDB [(none)]> start slave; #启动复制

MariaDB [(none)]> show slave status \G; #查看从服务器状态

#如果下面两个参数是YES,则代表主从复制成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

另一台的参考上面步骤再做一次就行。

两组主从

从库1配置复制主库1

vim /etc/my.cnf  #修改配置文件

[mysqld]
....
log-bin=mysql-bin   #启动二进制日志
server-id=3    #服务器唯一ID 0--65535范围 
relay-log=mysql-relay-bin  #启用中继日志

replicate-ignore-db=mysql  #设置不需要从主库复制的数据库名字
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
replicate-ignore-db=sys

log-slave-updates=1  #开启联等备份

auto_increment_increment=2    #自增值的偏移量
auto_increment_offset=2     #自增值的增量

character_set_server=utf8    #设定默认字符集为utf8
collation_server=utf8_general_ci   #设定默认校对规则为utf8_general_ci

service mariadb restart #重启mariadb使配置文件生效

mysql -u root -p123456     #登录进入slave1的mariadb
MariaDB [(none)]> create database  test1;     #创建数据库

#对于之前没有配置过主从复制的服务器来说,可以跳过这两步
(可选)MariaDB [(none)]> stop slave; #停止从服务器复制功能
(可选)MariaDB [(none)]> reset slave;  #重新配置从服务器复制功能

MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='169.69.85.111', #主机的IP地址
MASTER_USER='slave', #登录的用户名
MASTER_PASSWORD='123456',
MASTER_PORT=3306, #连接的端口
MASTER_LOG_FILE='mysql-bin.000003', #日志具体数字
MASTER_LOG_POS=245; #位点具体值

#下面这段没有注释便于修改
CHANGE MASTER TO MASTER_HOST='169.69.85.111',MASTER_USER='slave',MASTER_PASSWORD='123456',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=245
MariaDB [(none)]> start slave; #启动复制

MariaDB [(none)]> show slave status \G; #查看从服务器状态

#如果下面两个参数是YES,则代表主从复制成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

从库2配置复制主库2

vim /etc/my.cnf  #修改配置文件

[mysqld]
....
log-bin=mysql-bin   #启动二进制日志
server-id=4    #服务器唯一ID 0--65535范围 
relay-log=mysql-relay-bin  #启用中继日志

replicate-ignore-db=mysql  #设置不需要从主库复制的数据库名字
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
replicate-ignore-db=sys

log-slave-updates=1  #开启联等备份

auto_increment_increment=2    #自增值的偏移量
auto_increment_offset=2     #自增值的增量

character_set_server=utf8    #设定默认字符集为utf8
collation_server=utf8_general_ci   #设定默认校对规则为utf8_general_ci

service mariadb restart #重启mariadb使配置文件生效

mysql -u root -p123456     #登录进入slave1的mariadb
MariaDB [(none)]> create database  test1;     #创建数据库

#对于之前没有配置过主从复制的服务器来说,可以跳过这两步
(可选)MariaDB [(none)]> stop slave; #停止从服务器复制功能
(可选)MariaDB [(none)]> reset slave;  #重新配置从服务器复制功能

MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='169.69.85.112', #主机的IP地址
MASTER_USER='slave', #登录的用户名
MASTER_PASSWORD='123456',
MASTER_PORT=3306, #连接的端口
MASTER_LOG_FILE='mysql-bin.000003', #日志具体数字
MASTER_LOG_POS=245; #位点具体值

#下面这段没有注释便于修改
CHANGE MASTER TO MASTER_HOST='169.69.85.111',MASTER_USER='slave',MASTER_PASSWORD='123456',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=245
MariaDB [(none)]> start slave; #启动复制

MariaDB [(none)]> show slave status \G; #查看从服务器状态

#如果下面两个参数是YES,则代表主从复制成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

若IO显示连接中

解决1:查看防火墙是否关闭
解决2:由于每次数据库重启后都会导致master status发生变化,所以需要根据当前的master status来修改从数据库中的SQL同步语句

测试

Master [(none)] > create table test1.test(id int);

SLAVE [(none)] > use test1;
SLAVE [master1] > show tables;   

若剩下三个数据库内都存在表test则表示配置成功

最后修改:2024 年 04 月 24 日
如果觉得我的文章对你有用,请随意赞赏