两主两从配置(mariaDB)
配置四台机器,其中AB为双主互从,C是A的从机,D是B的从机,本文中配置监视所有数据库
具体配置文件解析参考https://yukisrye.top/index.php/archives/18/
优先配置两主互从
再次备注:数据库的创建要在配置主从复制之前
IP | ||
---|---|---|
A : master1 | 169.69.85.111 | A和B互为主从 |
B : master2 | 169.69.85.112 | A和B互为主从 |
C : slave3 | 169.69.85.113 | A的从 |
D : slave4 | 169.69.85.114 | B的从 |
安装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则表示配置成功