索拉布特在天上 #
腾迅更新了协议,机器人登录过身份严重越来越难了,我现在也在希望 Mirai 在 2.15-RC 能修复登录问题。
SoraBot 宕了几天,换了 3 个号,一天干废一个。
没办法,我现在唯一能登录的手段,是通过安卓手表协议、启用 QR 码验证,并且只能在「扫码设备和机器人在同一个局域网下」的情况下才能成功登录。
在各个 issues 里,论坛里,其他机器人群里,都可以看到这次影响的广泛和严重。
手表协议很多消息和事件无法正确收到,功能性上大打折扣。
SoraBot 使用 Mysql 数据库存储用户和配置信息。
关于橙汁的查询,很多资料也是存储在 Mysql。
现在机器人托管在 sugurip 上,discord 机器人、pixiv 爬虫、twitter 爬虫 以及一堆功能都无法正常使用。
sugurip 上并没有原设置的数据库,也没有橙汁的数据库。虽然可以通过远程访问,但不如本地数据库原生。而且 sumika 的服务最近也不是很稳定,我的阿里云服务器前天才宕过一次。于是便有了这次数据库同步。
本篇日志记录了一次 Myql Replication 的建立,创建了原生的 Msql Master-Slave 主从同步。
导入导出原数据 #
我们假定 sumika 是主服务器,sugurip 是从服务器。同步的范畴在 data_ethene 和 data_oj 这两个库。 haneki 是我的常用用户,后续章节将新建一个新用户 ‘repl’@’%’ 专门用于同步。
# 在主服务器 sumika 上
mysqldump -u haneki -p data_ethene > data_ethene.sql
mysqldump -u haneki -p data_edata_ojthene > data_oj.sql
# 在从服务器 sugurip 上
mysql -u haneki -p data_ethene < data_ethene.sql
mysql -u haneki -p data_oj < data_oj.sql
#这将保证在进行主从同步前,两个数据库的内容是一致的。
开启同步设置 建立专用用户 #
哈哈,就在我写这篇日志的中途,机器人又被风控了群消息。好想把腾迅的头给拧下来。
在 sumika 和 sugurip 分别编辑 /etc/mysql/mysql.conf.d/mysqld.cnf ,确保区分 server-id 。
在 replicate-do-db 设置需要同步的库。
# /etc/mysql/mysql.conf.d/mysqld.cnf
# sumika 上
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
replicate-do-db = data_ethene
replicate-do-db = data_oj
# sugurip 上
server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
replicate-do-db = data_ethene
replicate-do-db = data_oj
在两台服务器上都重启 Mysql 服务。
#sumika 和 sugurip 上
systemctl restart mysql
在主服务器 sumika 上建立专用用户 ‘repl’@’%’
#sumika 上
#新建用户
mysql>create user 'repl'@'%' identified by '******';
#赋权
mysql>grant replication slave on data_ethene.* to 'repl'@'%';
mysql>grant replication slave on data_oj.* to 'repl'@'%';
#查看状态
mysql>show master status \G
*************************** 1. row ***************************
File: mysql-bin.000003
Position: 13228
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
这里的 File: mysql-bin.000003
和 Position: 13228
会在同步时用到。
在从服务器 sugurip 上开启 slave。
#设置主服务器、文件、节点
mysql>change replication source to source_host='***.***.***.***',source_log_file='mysql-bin.000003',source_log_pos=13228;
Query OK , 0 rows affected (0.02 sec)
#通过刚设置的专用用户进行同步
mysql>start replica user='repl'@'%' password='******';
Query OK , 0 rows affected (0.02 sec)
#查看状态
mysql>show replica status \G
在输出中查看以下两项。
Replica_IO_Running: Yes
Replica_SQL_Running: Yes
到此既完成了主从同步的建设。在 sumika 上 data_ethene 和 data_oj 的变动将被同步到 sugurp 上。
如果输出是
Replica_IO_Running: No
Replica_SQL_Running: Yes
可能原因是从服务器的 source_log_pos=
和 source_log_file=
与主服务器不一致。