前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记录一次Mysql主从以及高可用操作【未完待续】

记录一次Mysql主从以及高可用操作【未完待续】

作者头像
Laikee
发布2022-04-25 19:13:28
2970
发布2022-04-25 19:13:28
举报
文章被收录于专栏:Laikee Tech Space

之前托管的物理机组的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;
记录一次Mysql主从以及高可用操作【未完待续】
记录一次Mysql主从以及高可用操作【未完待续】

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实现过滤。

代码语言:javascript
复制
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

记录一次Mysql主从以及高可用操作【未完待续】
记录一次Mysql主从以及高可用操作【未完待续】

上面的两个进程都显示YES则表示配置成功

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

IPVS Keepalived配置关键服务

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

to be continue...

参考

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 拷贝数据
    • 用户添加
      • 刷新并锁库
        • 导出数据
        • 配置主服务器
        • 配置从服务器
        • IPVS Keepalived配置关键服务
        • 参考
        相关产品与服务
        云数据库 SQL Server
        腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档