mysql数据库master_Mysql数据库双机(Master/Slave)架构注意事项

说明:

Mysql数据库主从备份的双机模式(Master和Slave不进行切换,各自身份确定。),部署过程相对简单,因为网上成熟和详尽的文档可以说是比比皆是,但是在双机运行阶段,总会有一些这样或那样的问题,为了便于记忆,个人特别整理汇总了部分常见问题,希望对大家今后工作有所参考。

具体描述:

一、主机中断服务,从机上线工作

这种情况是最为常见的一种情况;

特别需要注意的一点是:必须暂时停掉从机的同步;

cd /usr/local/mysql/bin/

./mysql -uroot -pwebxber-P3306 -e "slave stop"

这是必须的操作,之所以这样,比如以下场景:

主机停止服务并非是由于数据库故障,而是其他系统故障造成的。在主从系统切换以后,从机已经上线,在生产环境中已经增加了新的数据。一旦主机数据库恢复正常上线,由于同步的配置没有取消,主机将根据故障前的数据情况,重新同步从机,导致从机新增加的所有数据丢失。

二、主机系统恢复,如何同步数据

主机master恢复,准备上线。

为了保证数据完整,有人建议将目前从机slave对应的数据库的所有表lock,然后再备份。备份恢复,主机上线以后再解锁。

个人觉得有点麻烦,一般是会选一个夜深人静,狗少人稀的时间段去操作,直接在从机上将对应数据库的目录打包,然后copy到master的data目录;

在master机上,关闭mysql服务,service mysql stop

重命名对应数据库,比如vsb-old;

解压;启动mysql,service mysql start

cd /usr/local/mysql/bin/

./mysql -u root –p

输入密码;

show master status;

2f8cabb873f01801e525b94813de840c.png

查看运行情况;记录mysql-bin和Position的数值备用;

quit

(如果有必要的话,在VSB中更改数据库连接池测试;)

登录slave,

cd /usr/local/mysql/bin/

./mysql -u root –p

输入密码以后;

resetslave;

change master to

master_host='192.168.59.110',

master_user='bak',

master_password='123456',

master_log_file='mysql-bin.000016',

master_log_pos=98;

quit

重新启动mysql的服务;service mysql stop

service mysql start

cd /usr/local/mysql/bin/

./mysql -u root –p

输入密码以后;

slave start;

show slave status\G;

06c24bde28bc374a76314780005b32a2.png

quit

三、主机完好运行,从机slave 损毁,须重配置

从机上安装与master上对应的mysql版本并完成基本配置;

Master上操作:

备份master对应数据库,同上文提到的原因一样,也是建议锁表的;

FLUSHTABLES WITH READ LOCK;

UNLOCK TABLES;

当然了,你也可以找一个不严格的时间去做。

cd /usr/local/mysql/bin/

./mysql -u root –p

输入密码;

show master status;

2f8cabb873f01801e525b94813de840c.png

查看运行情况;记录mysql-bin和Position的数值备用;

从机上操作:

将master上对应数据库的目录打包并上传到对应的data目录;

Slave上停止mysql服务,解压数据库文件;

配置my.cnf文件;

f962ca69de3126fc37074a0a6677f50d.png

启动mysql服务;

cd /usr/local/mysql/bin/

./mysql -u root –p

输入密码以后;

slave stop;

resetslave;

change master to

master_host='192.168.59.110',

master_user='bak',

master_password='123456',

master_log_file='mysql-bin.0000xx',

master_log_pos=xxx;

quit

重新启动mysql的服务;service mysql stop

service mysql start

四、Mysql数据库data目录迁移

由于mysql默认一般会安装在/usr/local目录;data一般在/usr/local/mysql/data 或/var/lib/mysql等;

而同步又采用二进制日志的形式,所以很容易造成data目录不断增大,如果建设初期硬盘分区没有考虑到这些问题,最终可能会导致磁盘空间不足,甚至是引发根/空间不足,影响整个系统的运行;因此在出现类似情况的时候,一般会对data目录进行迁移;

(当然了,data目录安装过程是可以自定义的,但是我个人不建议你这样做,除非你自己做过,你一定要相信我,如果你不熟悉,千万不要这样做,我是很爱你的,不要因为你的固执而痛失一个爱你的人。)

参考操作:

将/usr/local/mysql/data迁移到/opt/mysql/data

service mysql stop

mkdir -p /opt/mysql/data

mkdir -p /opt/mysql/tmp

cp–r /usr/local/mysql/data/*/opt/mysql/data

编辑/etc/my.cnf文件,修改socket文件位置;

0c3c841fe4e06b44fdf845afed95e04e.png

编辑/etc/init.d/mysql文件;注意权限;

9d54f58e18abd7d2c6e53b6937ceb22f.png

chown –Rmysql:mysql /opt/mysql

service mysql start

五、日常运行中出现slave不同步

showmaster status;

1.1062错误

可能原因是master库意外宕机或者slave库被非法(不合理)操作,导致主键冲突问题;

参考解决方法:

Slave机的my.cnf文件,增加忽略常见的errors

slave-skip-errors = 1032,1062,126,1114,1146,1048,1396

重启Slave的mysql;

2.个别表被Lock,这个目前最为常见。

原因一般是两套产品做冷备,生产环境连接master库,备用环境连接slave库,比如:为了验证备份环境的可用性,用户经常通过页面浏览的方式去查看站点,导致站点访问记录表wbstatdata被双写,最终发生死锁,导致同步失败。

这个问题较为简单的参考解决方法是:

在salve的my.cnf增加:

slave-skip-errors=all

忽略所有错误;

当然了,还有其他的方法,就是重新定义pos位置,跳过这个错误,操作相对繁琐,有兴趣的同学可以研究。

六、附加问题

同步传输正常,待到Slave启动切换,结果发现中文乱码;

建议增加:my.cnf(多个位置)

default-character-set=utf8

另外,还有一个可能是Slave当时建库之初就没有指定数据库的字符集;

你丫悲催了,此时发现太晚了,最好日常多查看双机的运行情况。

附注:

个别问题可能是偶然现象,我也是根据个人的具体环境具体操作整理,不同的场景,肯定有所出入,以上所有内容仅能作为参考,完全仿照操作带来的一切风险和后果,本人概不负责。另外,本文无版权和产权,文中的技术细节不提供讨论,如有纰漏或错误,烦请指出,重新发布更正后的文档即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值