之前托管的物理机组的Raid5出现了一块坏盘,介于最近的事情较多,暂时不打算对其做替换,
不管硬盘是否可靠,数据备份也是必要的。之前本来是有做计划任务备份的,但是使用的宝塔面板并不支持排除某个数据库,只能选择所有,我有个裤子达到了60G,也懒得去修改宝塔自带的计划任务。因为出现事故第一时间是恢复业务,然而备份只能说是second choice,后续可能会对其进行修改来实现排除某些个数据库的功能。
之前也做过主从,这次针对相关服务基于ipvs实现HA。

拷贝数据

用户添加

grant replication slave on *.* to 'rep'@'81.69.%' identified by '123';
grant replication slave on *.* to 'rep'@'81.69.%' identified by '123';

刷新并锁库

flush tables with read lock;
show master status;

185.png

File的值是当前使用的二进制日志的文件名,Position是该日志里面的位置信息(不需要纠结这个究竟代表什么),记住这两个值,会在下面配置从服务器时用到。

注意:如果之前的服务器并没有配置使用二进制日志,那么使用上面的sql语句会显示空,在锁表之后,再导出数据库里的数据(如果数据库里没有数据,可以忽略这一步)

导出数据

mysqldump -uroot -p'123456' -S /tmp/mysql.sock --all-databases > /www/server/backup/mysql_bak.$(date +%F).sql

这里--all-databases会导出所有库,实际上我们并不希望如此,可使用xargs实现过滤。

mysql -S /tmp/mysql.sock -uroot -p'123456' -e "show databases;" | grep -Ev "Database|information_schema|mysql|test" | xargs mysqldump -uroot -p'123456' --databases > /www/server/backup/mysql_bak.$(date +%F).sql

如果数据量很大,可以在导出时就压缩为原来的大概三分之一

mysql -S /tmp/mysql.sock -uroot -p'123456' -e "show databases;" -uroot -p| grep -Ev "Database|information_schema|mysql|test" | xargs mysqldump -uroot -p'123456' --databases | gzip > /www/server/backup/mysql_bak.$(date +%F).sql

这时可以对数据库解锁,恢复对主数据库的操作

unlock tables;

配置主服务器

[mysqld]

log-bin=mysql-bin
skip-slave-start
server-id=1
binlog-ignore-db=test
# 不记录某个库的binlog

注意上面的log-bin和server-id的值都是可以改为其他值的,如果没有上面的配置,首先关闭mysql服务器,然后添加上去,接着重启服务器

配置从服务器

首先检查从服务器上的my.cnf文件中是否已经在[mysqld]模块下配置server-id

[mysqld]

server-id=2
replicate-ignore-db=test
replicate-wild-do-table=test.%
# 忽略某些库

注意上面的server-id的值都是可以改为其他值的(建议更改为ip地址的最后一个字段),如果没有上面的配置,首先关闭mysql服务器,然后添加上去,接着重启服务器

如果有多个从服务器上,那么每个服务器上配置的server-id都必须不一致。从服务器上没必要配置log-bin,当然也可以配置log-bin选项,因为可以在从服务器上进行数据备份和灾难恢复,或者某一天让这个从服务器变成一个主服务器

如果主服务器导出了数据,下面就导入该文件,如果主服务器没有数据,就忽略这一步

[root@localhost ~]# mysql -uroot -p'123456' -S /tmp/mysql.sock < /server/backup/mysql_bak.2022-03-09.sql
如果从主服务器上拿过来的是压缩文件,就先解压再导入

配置同步参数,登陆mysql,输入如下信息:

mysql> CHANGE MASTER TO
MASTER_HOST='ip地址',
MASTER_USER='rep',
MASTER_PASSWORD='rep密码',
MASTER_LOG_FILE='mysql-bin.000019',
MASTER_LOG_POS=120;

启动主从同步进程
start slave;
检查状态
show slave status \G
186.png
上面的两个进程都显示YES则表示配置成功

到此基本主从配置就完成了。
需要注意的是,一旦主库发生重启、当机等情况,需要检测数据一致性后才能start slave

IPVS Keepalived配置关键服务

部分服务是依赖其他服务进行改动的,所以当其他服务暂不可用的时候实际是不应影响这些服务的。
所以需要组件一个小型的虚拟网络实现ipvs,或者是采用hosts的方式进行主机指定,但是并不适用于那些只允许ip的应用

to be continue...

参考

MySQL主从复制
mysqldump过滤数据库
mysql主从配置忽略特定数据库
mysql binlog 忽略和记录指定库