MariaDB 主从数据库同步
那什么,网站在日本,数据库在新加坡,然后吧,网站与数据库之间通信延时 100ms 左右,导致网站打开比较慢,嗯,这不为了提高体验,就折腾了一下同步的事情。
1,环境:
OS: CentOS 7.4 x64
DB: MariaDB 5.5.56
2, 服务端新建一个用于同步的用户:
1
MariaDB [(none)]> GRANT FILE, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'sync_account'@'%' IDENTIFIED BY '123456';
3, 修改服务端 my.cnf
配置文件:
1
2
3
4
5
6
7
8
server-id = 1 #Server标识, 不能重复
log-bin = mysql-bin #日志文件名
auto_increment_increment=2 #自动增长的步长 解决多个主机自动增长出现重复问题 这个主机使用奇数值 另外一个主机使用偶数值
auto_increment_offset=1 #自动增长的起始数值
binlog-do-db=testdb #指定需要日志的数据库,多个加一行,不需要就注释
binlog-ignore-db = db_name #指定不需要日志的数据库,多个加一行,不需要就注释
replicate-do-db = testdb #指定从端需要同步的数据库,多个加一行,不需要就注释
4,重启 MariaDB:
1
service mariadb restart
配置过程中为了防止突然的主机数据写入 导致配置主从失败 可以将机器锁定只允许读 注意千万不要将从机配成锁定 否则无法同步数据了
1
MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;
配置完从端解锁:
1
MariaDB [(none)]> UNLOCK TABLES;
5, 备份数据库:
1
mysql -u root -p --quick --all-databases --flush-logs --delete-master-logs --single-transaction > sync.sql
6, 查看服务端状态
1
MariaDB [(none)]> SHOW MASTER STATUS;
显示类似如下:
1
2
3
4
5
6
7
+------------------+----------+-------------------------------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+-------------------------------------+------------------+
| mysql-bin.000013 | 1714336 | testdb | |
+------------------+----------+-------------------------------------+------------------+
1 row in set (0.00 sec)
7, 从端导入数据库
1
mysql -u root -p < sync.sql
8, 修改从端 my.cnf
配置文件:
1
2
3
4
5
server-id = 2
auto_increment_increment=3
auto_increment_offset=1
#其余项目与服务端一致就可以了, 完了重启 MariaDB
9,配置从端主服务器信息:
1
2
3
4
5
6
7
8
9
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='master.host.name',\ #主服务器主机名称
-> MASTER_USER='sync_account',\ #用于复制的用户
-> MASTER_PASSWORD='12345',\ #复制用户的密码
-> MASTER_PORT=3306,\ #连接使用的端口
-> MASTER_LOG_FILE='mysql-bin.000013',\ #起点日志文件
-> MASTER_LOG_POS=1714336,\ #起点位置
-> MASTER_CONNECT_RETRY=10,\ #连接重试间隔
-> MASTER_HEARTBEAT_PERIOD=2; #心跳间隔时间
10, 启动从端数据库同步
1
MariaDB [(none)]> START SLAVE; #启动同步进程
11, 查看同步信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
MariaDB [(none)]> SHOW SLAVE STATUS\G #查看从服务器线程的关键参数的信息
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: master
Master_User: backup1 #被用于连接主服务器的当前用户
Master_Port: 3306
Connect_Retry: 10 #连接重试间隔
Master_Log_File: mysql-bin.000003 #I/O线程当前正在读取的主服务器二进制日志文件的名称
Read_Master_Log_Pos: 1832 #在当前的主服务器二进制日志中,I/O线程已经读取的位置
Relay_Log_File: relay-bin.000003 #SQL线程当前正在读取和执行的中继日志文件的名称
Relay_Log_Pos: 529 #在当前的中继日志中,SQL线程已读取和执行的位置
Relay_Master_Log_File: mysql-bin.000003 #由SQL线程执行的包含多数近期事件的主服务器二进制日志文件的名称
Slave_IO_Running: Yes #I/O线程是否被启动并成功地连接到主服务器上
Slave_SQL_Running: Yes #SQL线程是否被启动
...
Master_Server_Id: 2
12, 查看从端 MASTER 状态,然后在主端启动服务器同步就可以实现相互同步了。
参考:
本文由作者按照 CC BY 4.0 进行授权