之前托管的物理机组的Raid5出现了一块坏盘,介于最近的事情较多,暂时不打算对其做替换, 不管硬盘是否可靠,数据备份也是必要的。之前本来是有做计划任务备份的,但是使用的宝塔面板并不支持排除某个数据库,只能选择所有,我有个裤子达到了60G,也懒得去修改宝塔自带的计划任务。因为出现事故第一时间是恢复业务,然而备份只能说是second choice,后续可能会对其进行修改来实现排除某些个数据库的功能。 之前也做过主从,这次针对相关服务基于ipvs实现HA。
拷贝数据
用户添加
代码语言:javascript复制grant replication slave on *.* to 'rep'@'81.69.%' identified by '123';
grant replication slave on *.* to 'rep'@'81.69.%' identified by '123';
刷新并锁库
代码语言:javascript复制flush tables with read lock;
show master status;
File的值是当前使用的二进制日志的文件名,Position是该日志里面的位置信息(不需要纠结这个究竟代表什么),记住这两个值,会在下面配置从服务器时用到。
注意:如果之前的服务器并没有配置使用二进制日志,那么使用上面的sql语句会显示空,在锁表之后,再导出数据库里的数据(如果数据库里没有数据,可以忽略这一步)
导出数据
代码语言:javascript复制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
如果数据量很大,可以在导出时就压缩为原来的大概三分之一
代码语言:javascript复制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;
配置主服务器
代码语言:javascript复制[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
代码语言:javascript复制[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,输入如下信息:
代码语言:javascript复制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
上面的两个进程都显示YES则表示配置成功
到此基本主从配置就完成了。 需要注意的是,一旦主库发生重启、当机等情况,需要检测数据一致性后才能start slave
IPVS Keepalived配置关键服务
部分服务是依赖其他服务进行改动的,所以当其他服务暂不可用的时候实际是不应影响这些服务的。 所以需要组件一个小型的虚拟网络实现ipvs,或者是采用hosts的方式进行主机指定,但是并不适用于那些只允许ip的应用
to be continue...
参考
MySQL主从复制 mysqldump过滤数据库 mysql主从配置忽略特定数据库 mysql binlog 忽略和记录指定库