在前期,我们讲到了利用shell脚本,通过ipv6网络将公网服务器数据库备份到本地服务器。但只能做到备份,如果公网服务器数据库挂掉,能不能用本地的数据库呢?这需要我们先配置主从复制。
由于笔者公网服务器和和本地服务器都部署了宝塔。虽然宝塔有主从复制的插件,但要钱~
因此,我们只能手搓主从复制了!
环境
-
公网MySQL 5.7.44 -
本地MySQL 5.7.44 -
ipv6网络
在实验前,先从公网服务器测试ipv6网络是否能连接本地数据库。
配置主数据库
点击数据库配置文件,进行修改。
[mysqld]server-id = 1log_bin = mysql-binbinlog_format = rowexpire_logs_days = 7binlog_do_db = blog
接下来,我们用root
账号登录。新增一个用于主从复制的账号。
mysql -u root -p#输入密码后,分别执行下面命令CREATE USER 'repl_user'@'%' IDENTIFIED BY 'YourStrongPassword';GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';FLUSH PRIVILEGES;
请将repl_user
和YourStrongPassword
更改为你的密码。 接下来,获取主服务器二进制日志状态 执行以下命令并记录 File
和 Position
的值:
SHOW MASTER STATUS;
本地服务器配置 (从)
编辑从服务器的MySQL配置文件,添加:
[mysqld]server-id = 2relay-log = mysql-relay-binreplicate_do_db = blog
注意
-
server-id
必须与主服务器不同。 -
replicate_do_db
指定从服务器需要复制的数据库。
接下来,重启MySQL服务。
初始化数据
登录主服务器,我们先将数据库进行手动同步。
mysqldump -u root -p --master-data --databases bbs blog > /root/db_dump.sql
将 db_dump.sql
传输到从服务器,执行导入:
mysql -u root -p < /root/db_dump.sql
启动从服务器复制
登录从服务器MySQL,执行:
CHANGE MASTER TOMASTER_HOST = 'nas.nb.cn', #主服务器地址MASTER_PORT = 3306,MASTER_USER = 'repl_user',MASTER_PASSWORD = 'YourStrongPassword',MASTER_LOG_FILE = 'mysql-bin.000001', # 替换为记录的File值MASTER_LOG_POS = 1234; # 替换为记录的Position值
启动复制
START SLAVE;
检查复制状态
SHOW SLAVE STATUSG
关键指标
-
Slave_IO_Running: Yes
-
Slave_SQL_Running: Yes
接下来,我们对测试表中,加入数据,在本地便可以实时同步。
主从切换
在宝塔面板环境中实现主数据库故障后自动切换到本地从数据库。 打开网站的Nginx配置,添加以下内容
upstream backend {# 主库对应的应用服务器(默认使用主库) server 公网应用服务器IP:端口 weight=10 max_fails=3 fail_timeout=30s;# 从库对应的应用服务器(本地IPv6地址,备用) server [本地IPv6地址]:端口 backup;}server { listen 80; server_name your_domain.com; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }}
假设,http://backend 应用读的数据库为本地数据库。当主服务器不可用时自动切换。但是,这样有个缺陷,该如何确保数据一致性,尤其是在主库恢复后,是否需要重新同步数据,或者将本地数据库提升为新的主库。这可能涉及到主从复制的重新配置。
常见故障分析
Slave_SQL_Running的值为NO
,是因为主从服务器数据结构或者数据不一样。根据日志,查看数据异常的表。或者用下面命令跳过。
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; -- 跳过1个错误事件
原文始发于微信公众号(kali笔记):宝塔环境如何 主从复制 主从切换
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论