MariaDB/mysql互为主备配置

By AverageJoeWang
 标签:  标签:

一共2台centos7的服务器,要设置mariadb互为主备,主的是192.1681.1.12,备份的是192.168.1.16,设置hostname的语句hostnamectl set-hostname 16

主从关系图

一.删除mariadb

systemctl stop mariadb
rpm -qa | grep MariaDB*
rpm -e --nodeps MariaDB-common-10.1.22-1.el7.centos.x86_64
rpm -e --nodeps MariaDB-server-10.1.22-1.el7.centos.x86_64
rpm -e --nodeps MariaDB-client-10.1.22-1.el7.centos.x86_64
rm -rf /var/log/mariadb/mariadb.log.rpmsave /etc/my.cnf* /var/lib/mysql

二.安装mariadb

分别下载mariadb相关的安装包,然后yum install

yum install galera-25.3.19-1.rhel7.el7.centos.x86_64.rpm  MariaDB-10.1.22-centos7-x86_64-client.rpm  MariaDB-10.1.22-centos7-x86_64-server.rpm jemalloc-3.6.0-1.el7.x86_64.rpm MariaDB-10.1.22-centos7-x86_64-common.rpm

三.启动测试与设置(在12和16上用root用户登录设置)

#启动
systemctl start mariadb.service
#设置开机自启
systemctl enable mariadb.service
#登录
mysql -u root -p(首次安装没有密码,回车2次)

设置密码

update mysql.user set password=password('123456') where User="root";
flush privileges;

创建用户

insert into mysql.user(Host,User,Password) values("localhost","qukan",password("密码"));
flush privileges;

四.设置数据库权限(在12和16上用root用户登录设置)

grant all privileges on *.* to qukan@localhost identified by "密码" ; ## 其他权限
grant all privileges on *.* to qukan@"%" identified by "密码" ; ##远程
flush privileges;

测试:然后可以在服务器远程登录另一台数据库

mysql -h 192.168.1.16/12 -u qukan -p密码

五.Master配置文件(root权限下,ip为12的设置)

vim /etc/my.cnf
  • my.cnf内容
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# as master
server-id=1    #主机id,整数
#开启二进制日志,并且名称为 /var/lib/mysql/mysql-bin.***
log-bin=mysql-bin
read-only=0  #主机读写权限,读写都可以
binlog-do-db=cloud  #记录日志的数据库:需要的备份数据,多个写多行
# binlog-do-db=
binlog-ignore-db=mysql #不记录日志的数据库:不需要备份的数据库,多个写多行
binlog-ignore-db=test
binlog-ignore-db=information_schema

# as slave
replicate-do-db =cloud #只复制某个库,多个写多行
replicate-ignore-db=mysql #不复制某个库
replicate-ignore-db=test
replicate-ignore-db=information_schema
relay-log=mysqld-relay-bin  # 开启日志中继
log-slave-updates  # slave将复制事件写进自己的二进制日志

# 自增字段奇数递增,防止冲突(1, 3, 5, ...,)
auto-increment-increment = 2  # 每次递增的步长
auto-increment-offset = 1  # 初始值


[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
  • 数据库重启
systemctl restart mariadb.service
mysql -u root -p123456

六.在master上设置slave的权限(在12用root用户登录设置)

GRANT REPLICATION SLAVE ON *.* TO 'qukan'@'192.168.1.16' IDENTIFIED BY 'HzQukan888';
  • 数据库重启
systemctl restart mariadb.service
mysql -u root -p123456

七.slave配置文件(在16用root用户登录设置)

vim /etc/my.cnf
  • my.cnf配置内容
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# as slave
server-id=2
log-bin=mysql-bin
replicate-do-db =cloud #只复制某个库,多个写多行
replicate-ignore-db=mysql #不复制某个库
replicate-ignore-db=test
replicate-ignore-db=information_schema
relay-log=mysqld-relay-bin  # 开启日志中继
log-slave-updates  # 示slave将复制事件写进自己的二进制日志

# as master
#开启二进制日志,并且名称为 /var/lib/mysql/mysql-bin.***
log-bin=mysql-bin
read-only=0  #主机读写权限,读写都可以
binlog-do-db=cloud   #记录日志的数据库:需要的备份数据,多个写多行
# binlog-do-db=hello2
binlog-ignore-db=mysql #不记录日志的数据库:不需要备份的数据库,多个写多行
binlog-ignore-db=test
binlog-ignore-db=information_schema


# 自增字段偶数递增,防止冲突(2, 4, 6, ...,)
auto-increment-increment = 2  # 每次递增的步长
auto-increment-offset = 2  # 初始值

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
  • 数据库重启
systemctl restart mariadb.service
mysql -u root -p123456

八.配置从服务器

从master上获取信息(在12上用root登录设置)

flush tables with read lock;
show master status\G
*************************** 1. row ***************************
            File: mysql-bin.000001
        Position: 1104
    Binlog_Do_DB: blog
Binlog_Ignore_DB: mysql,test,information_schema
1 row in set (0.00 sec)

unlock tables;

后面需要用到File和Position的信息

Slave配置(在16上用root账户登录)

CHANGE MASTER TO  MASTER_HOST='192.168.1.12', MASTER_USER='qukan', MASTER_PASSWORD='密码',  MASTER_PORT=3306,  MASTER_CONNECT_RETRY=15, MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 1104;

其中:

MASTER_HOST= //主服务器的IP地址
MASTER_USER=//同步数据库的用户
MASTER_PASSWORD=//同步数据库的密码
MASTER_CONNECT_RETRY=如果从服务器发现主服务器断掉,重新连接的时间差(秒)
MASTER_LOG_FILE=主服务器二进制日志的文件名(前面要求记住的 File 参数)
MASTER_LOG_POS=//日志文件的开始位置(前面要求记住的 Position 参数)

然后:

start slave;
show slave status\G;

Slave_IO及Slave_SQL进程必须正常运行,即两个YES状态

九.测试

在配置文件中,进行同步的数据库是blog,需要在主从上面分别手动创建数据库和数据表。

在master(用qukan账号登录,在12上)

create database cloud; #cloud数据库名字应该分别在my.cnf文件中添加,然后重启数据库
create table cloud.test(`id` varchar(10)); 
insert into cloud.test(id) values("2222");
select * from cloud.test;

slave服务器上(用qukan账号登录,在16上)

select * from cloud.test;

十.互为主从模式

重复上面的第七步和第八步,只是将16看成为master,12看成是slave,配置文件不需要修改。

十一.其他说明

  • 如果配置错误,需要停止重新配置的话,停止和重置命令是
stop slave;
reset slave; #适用5.5之前版本
reset slave all; #适用5.5之后版本
  • 需要同步的数据库是需要分别在2台机器的/etc/my.cnf配置文件中添加的,添加的字段分别是replicate-do-db,binlog-do-db=cloud

  • 只要是修改配置文件就一定要systemctl restart mariadb.service重启数据库

参考

MySQL互为主从,备份数据
mysql双机主从及互为主从同步配置
MariaDB/Mysql之主从架构的复制原理及主从/双主配置详解(一)