聊聊,由于未加载tokudb引起造成Mysql主从同步失败的问题.

先听我说,我是个程序员,兼职部门的Mysql DBA . 部门里有好几个Mysql主从服务,每次做主从切换调换我都要欲仙欲死.  原本事不大,但每个库都要几个T大小.

今天原计划打算在程序里面做数据库主从读写分离,但发现他们的数据差异太大。 登上去一看,果然跟我预想的一样,同步出问题了。上次出过主从同步失败是因为网络问题。

.

文章写的不是很严谨,欢迎来喷,另外该文后续有更新的,请到原文地址查看更新。

http://xiaorui.cc/2016/01/13/%E7%94%B1%E4%BA%8E%E6%9C%AA%E5%8A%A0%E8%BD%BDtokudb%E5%BC%95%E8%B5%B7%E9%80%A0%E6%88%90mysql%E4%B8%BB%E4%BB%8E%E5%90%8C%E6%AD%A5%E5%A4%B1%E8%B4%A5/

.

先说下现在的Mysql关系,122是主,124是从服务器。  他们的主从关系虽然经过多次调换,但数据同步还是正常的。  但上次因为使用percona pt-online-change修改表结构的时出问题了。 由于pt-online-change每次修改字段都会创建一个新的临时表. 就是因为这个临时表…  这个新表是tokudb引擎,但是从数据库没有这个tokudb引擎,那么这问题的原因就好解释了. 

解决的方式很简单,干掉从服务器,然后安装含有tokudb引擎的MariaDB mysql server.  

MariaDB在5.5.41开始就内置了Tokudb引擎,貌似mariadb 10更加简单了,在配置文件中打开注释就可以了。 

vim mariadb.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.0/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

yum install MariaDB-server MariaDB-client -y

我们编辑下文件,在配置文件里加入so插件的支持。   vim /etc/mysql/conf.d/tokudb.cnf:  

plugin-load-add=ha_tokudb.so

重启数据库

$ sudo service mysql restart

如果启动时候报错,请查看/var/log/mysql.err错误日志。 

如果遇到这个问题    [ERROR] TokuDB will not run with transparent huge pages enabled.

另外我们需要注意一个内核参数, 一定要确保他是never状态。 

$ cat /sys/kernel/mm/transparent_hugepage/enabled

[always] madvise never

我们在同步数据库之前需要冷静一下. 我上次修改表结构或许是11月份,而现在的时间已经是1月份中旬了,查看了下主的binlog保留时间,确定主my.cnf的expire_logs_days是20天。  难道要重做主从? 这么大的数据光是copy就要好长时间的.

最后通过多方查资料,明白一个Mysql同步的那些事。  Mysql从服务器会启动两组线程,Slave_IO_Running 是负责同步binlog,slave_sql_running是负责把sql语句执行到本地.   当slave_sql_running因为各种原因出错时,Slave_IO_Running是不受影响的,照常传输binlog。

当我重新start slave的时候,遇到一个问题slave_sql_running no的问题…

话说如果slave_sql_running no了,那么也有两种可能,
1.程序可能在slave上进行了写操作
2.也可能是slave机器重启后,事务回滚造成的,这也是mysql的一种自我保护的措施,像关键时候只读一样。
一般是事务回滚造成的:
mysql> stop slave;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave;

总结,一定要细心看文档. 数据库要统一版本,我这就因为没有统一Mysql的版本,倒是有的Mysql是有Tokudb,有些没有. 



对Python及运维开发感兴趣的朋友可以加QQ群 : 478476595 !!!

另外如果大家觉得文章对你有些作用!   帮忙点击广告. 一来能刺激我写博客的欲望,二来好维护云主机的费用.
如果想赏钱,可以用微信扫描下面的二维码. 另外再次标注博客原地址  xiaorui.cc  ……   感谢!

mysql从innodb到tokudb引擎时遇到的问题

     收到微信报警说是数据库ssd盘快满了,空间还有100G了…  对于原本3.8T磁盘现在只剩下100G,麻烦事。 现在相关业务的数据库...

阅读全文