需求

我希望将位于北京阿里云的 MariaDB 中的 typecho 表,同步到上海腾讯云中去,并且只要北京阿里云的这个表发生了变化,便马上进行同步

假设北京为主库(Master),上海为从库(Slave),两台服务器已通过 WireGuard 互通,如何使用 WireGuard 进行互联可以看我别的文章,我觉得数据库直接暴露在公网还是不咋安全,也可以使用别的虚拟局域网或者 SSH Tunnel 的方法解决

主库

修改 my.cnf 配置

编辑 /etc/mysql/my.cnf,修改或添加以下内容:

[mysqld]
server-id=1
log-bin=mysql-bin
binlog-do-db=typecho
bind-address = 10.0.0.1
  • server-id=1:就是设置主库的 id 为 1
  • binlog-do-db=typecho:设置要同步的数据库
  • bind-address = 10.0.0.1:监听的 IP 白名单,不建议直接填写 0.0.0.0,这里填写你的 WireGuard 的 IP 即可

重启 MariaDB

sudo systemctl restart mariadb

创建同步账户

登陆到主库的数据库中:

mysql -u root -p

执行:

GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.0.0.2' IDENTIFIED BY 'slave_password';
FLUSH PRIVILEGES;

这里的 slave_password 要换成你自己设置的密码,10.0.0.2 要换成从库的 IP 地址,不可乱写,这里让 repl 用户只能从 10.0.0.2 进行登陆

随机密码设置可使用 openssl

openssl rand -hex 16

锁表,导出

锁表是为了不让在导出的过程中有写入的操作,避免出现问题

FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

执行 SHOW MASTER STATUS; 后要记录下对应的值:

另开终端,导出 sql 文件

mysqldump -u root -p --databases typecho > /root/typecho.sql

从库

安装 MariaDB

sudo apt update
sudo apt install mariadb-server

修改 my.cnf

编辑 /etc/mysql/my.cnf,修改或添加以下内容:

[mysqld]
server-id=2
relay-log=relay-log

重启 MariaDB:

sudo systemctl restart mariadb

导入主库数据

需要将主库导出的 sql 导入到从库中:

mysql -u root -p < /root/typecho.sql

配置主从同步

登陆上海的 MariaDB:

mysql -u root -p

执行:

CHANGE MASTER TO
  MASTER_HOST='10.0.0.1',
  MASTER_USER='repl',
  MASTER_PASSWORD='slave_password',
  MASTER_LOG_FILE='mysql-bin.000001', -- 用主库SHOW MASTER STATUS查到的File
  MASTER_LOG_POS=12345;               -- 用主库SHOW MASTER STATUS查到的Position

START SLAVE;
SHOW SLAVE STATUS\G

一定要注意,这里的:

  • MASTER_PASSWORD
  • MASTER_LOG_FILE
  • MASTER_LOG_POS

要填写你上面设置的和找到的,不能随便写

最后使用检查一下是否设置同步成功:

SHOW SLAVE STATUS\G

这两个为 Yes 基本上就没啥大问题了

解锁主库

回到北京 MariaDB:

UNLOCK TABLES;

检查是否插入成功

因为这个是实际用于部署到 typecho 作为数据库的,所以只要在 typecho 发一篇文章或者有个评论,数据库就会发生变化

写操作只在北京,当发生变化后,只要在上海的从库上测试看看是否能查到即可

在上海从库执行:

USE typecho;
SELECT * FROM information_schema.tables WHERE table_schema='typecho' ORDER BY UPDATE_TIME DESC LIMIT 10;

确实发生了改变,说明同步成功

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