一 试验环境
角色 | IP | 操作系统 | 数据库版本 |
主库 | 192.168.144.107 | CentOS 7 | 10.4.14-MariaDB-log |
备库 | 192.168.144.108 | CentOS 7 | 10.4.14-MariaDB-log |
二 试验步骤
2.1 配置主库
2.1.1 修改配置文件
vi /etc/my.cnf.d/server.cnf
主库配置文件[mysqld]下确保有以下配置:
log-bin
server_id=1
log-basename=master
binlog-format=row
修改完后重启数据库:
systemctl restart mariadb
2.1.2 在主库上创建复制用户
CREATE USER 'ReplUser'@'192.168.144.108' IDENTIFIED BY '自定义一个密码';
GRANT REPLICATION SLAVE ON *.* TO 'ReplUser'@'192.168.144.108';
2.1.3 制造测试数据
MariaDB [(none)]> create database baidd;
Query OK, 1 row affected (0.000 sec)
MariaDB [(none)]> use baidd;
Database changed
MariaDB [baidd]> create table t(id int,name varchar(30));
Query OK, 0 rows affected (0.008 sec)
MariaDB [baidd]> insert into t(id) values(1);
Query OK, 1 row affected (0.002 sec)
2.2 安装配置从库
2.2.1 安装从库
安装可参考https://blog.csdn.net/yabingshi_tech/article/details/108883903
2.2.2 修改配置文件
vi /etc/my.cnf.d/server.cnf
在[mysqld]下面添加:
log-bin
server_id=2
log-basename=slave1
binlog-format=row
#注意:从库的server_id不能和主库的server_id相同。
修改完后重启数据库:
systemctl restart mariadb
2.3 将主库上的数据恢复到从库上
2.3.1 备份数据库
#备份主库命令
mariabackup --backup --target-dir=/backup/ --user=root --password=密码
备份成功后,会提示:
completed OK!
#备注
如果该数据库集群中已经存在一台从库,想要备份该从库的话需要额外添加--slave-info --safe-slave-backup命令
mariabackup --backup \
--slave-info --safe-slave-backup \
--target-dir=/backup/ \
--user=mariabackup --password=mypassword
2.3.2 prepare数据库
mariabackup --prepare --target-dir=/backup/
2.3.3 拷贝备份到新从库上
scp -r /backup 192.168.144.108:/
2.3.4 在新从库上进行恢复
systemctl stop mariadb
#删除数据目录
cd /var/lib
mv mysql mysql_bak
mariabackup --copy-back --target-dir=/backup/
恢复成功后会提示:completed OK!
chown -R mysql:mysql /var/lib/mysql/
chmod -R 755 /var/lib/mysql
systemctl start mariadb
2.3.5 验证数据是否恢复成功
MariaDB [(none)]> select * from baidd.t;
+------+------+
| id | name |
+------+------+
| 1 | NULL |
+------+------+
2.4 配置主从复制
2.4.1 在主库制造测试数据
MariaDB [baidd]> insert into baidd.t(id) values(2);
Query OK, 1 row affected (0.045 sec)
MariaDB [baidd]> select * from baidd.t;
+------+------+
| id | name |
+------+------+
| 1 | NULL |
| 2 | NULL |
+------+------+
2 rows in set (0.000 sec)
2.4.2 在从库开启复制
2.4.2.1 获取复制坐标
我们需要从原始备份目录中获取主服务器的复制坐标。
如果我们在主库上备份,那么坐标将在xtrabackup_binlog_info文件中。如果我们在另一个slave上备份,并且我们提供了--slave info选项,那么坐标将在xtrabackup_slave_info文件中。
Mariabackup以两种形式转储复制坐标:GTID坐标和二进制日志文件和位置坐标。
$ cat /backup/xtrabackup_binlog_info
master-bin.000001 1180 0-1-5
2.4.2.2 设置gtid_slave_pos
#将gtid_slave_pos设置为从备份目录中的xtrabackup_binlog_info文件或xtrabackup_slave_info文件中提取的gtid坐标。
SET GLOBAL gtid_slave_pos = "0-1-5";
2.4.2.3 change master to指向主库
CHANGE MASTER TO
MASTER_HOST="192.168.144.107",
MASTER_PORT=3306,
MASTER_USER="ReplUser",
MASTER_PASSWORD="复制用户的密码",
MASTER_USE_GTID=slave_pos;
2.4.2.4 开启复制
START SLAVE;
2.4.3 检查从库复制状态
MariaDB [(none)]> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.144.107
Master_User: ReplUser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000001
Read_Master_Log_Pos: 1395
Relay_Log_File: slave1-relay-bin.000002
Relay_Log_Pos: 831
Relay_Master_Log_File: master-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
……
ERROR: No query specified
确保SQL进程和IO进程状态为YES。
2.4.4 检查确认主库上的测试数据是否同步到从库
可以看到id=2的数据同步过来了。
本篇文章主要参考自:https://mariadb.com/kb/en/setting-up-replication/