前言
因为随着mysql版本更新越来越快,打破MySQL本身的瓶颈,只能更新版本!这并不是一件轻松的事,尤其是需要升级的这个mysql5.1/5.5数据库还是一个线上运行且负载较重的业务数据库的时候。该数据库的数据目录中各种业务表加起来近之几十TB大,甚至有媲美互联网公司的PB级别的数据,甚至更大,整体集群升级更不是闹着玩的!在源服务器做就地升级操作,紧张程度也是不可避免的!
所以一定要在单个节点的从库上进行模拟测试,确保万无一失!
并且保证有最新的从库,如果主库升级失败可以很快的切换到从库而不影响业务的处理!
案例:5.5.28 ---》成功升级5.6.36
官方建议5.5升级到5.6最稳妥的办法是: mysqldump。但是面临TB级别数据,就非常耗时了!如果有升级时间,mysqldump就是最佳的逻辑策略!
彻底删除干净mysql5.5 全新安装5.6 然后逻辑进行导入5.6 这样就不会造成任何不兼容等问题!但是比较消耗时间!
所以我为大家总结一款需要快速升级MySQL数据库升级方案:
直接yum进行升级!
执行就地升级:
1、确保数据文件在发布之间的文件格式不同的情况下完全准备好。
mysql -u root -p --execute="SET GLOBAL innodb_fast_shutdown=0"
2、正确姿势关闭MySQL
service mysqld stop;
3、 添加MySQL的yum安装库
# wget http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm # rpm -ivh mysql-community-release-el6-5.noarch.rpm # yum list | grep mysql
这样很多更新的MySQL安装包就都有了。
如有必要,运行下面的命令确保yum安装库是最新的:
# yum update mysql-community-release
4、用yum查看MySQL安装相关信息
# yum list installed | grep ^mysql mysql-community-release.noarch
其中,^mysql是指以mysql开头的安装包。
用下面的命令查看安装了的和可用的安装包:
# yum info mysql-server
这里不知道为啥可用的安装包没有显示MySQL 5.6的。
5、检查可用的安装包:
# yum check-update mysql-server
6、升级MySQL及其组件
# yum update mysql-server
7、启动MySQL服务
# service mysqld start
8、 升级MySQL数据库及表
[root@master local]# mysql_upgrade -uroot -pzhangtongle123 Warning: Using a password on the command line interface can be insecure. Looking for 'mysql' as: mysql Looking for 'mysqlcheck' as: mysqlcheck Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/data/mysql/mysql.sock' Warning: Using a password on the command line interface can be insecure. Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/data/mysql/mysql.sock' Warning: Using a password on the command line interface can be insecure. mysql.columns_priv OK mysql.db OK mysql.event OK mysql.func OK mysql.general_log OK mysql.help_category OK mysql.help_keyword OK mysql.help_relation OK mysql.help_topic OK mysql.host OK mysql.ndb_binlog_index OK mysql.plugin OK mysql.proc OK mysql.procs_priv OK mysql.proxies_priv OK mysql.servers OK mysql.slow_log OK mysql.tables_priv OK mysql.time_zone OK mysql.time_zone_leap_second OK mysql.time_zone_name OK mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.user OK Running 'mysql_fix_privilege_tables'... Warning: Using a password on the command line interface can be insecure. Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/data/mysql/mysql.sock' Warning: Using a password on the command line interface can be insecure. Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/data/mysql/mysql.sock' Warning: Using a password on the command line interface can be insecure. maxscale_schema.replication_heartbeat OK mydb3.checksums OK mydb3.employee OK mydb3.my_hash_0 OK mydb3.my_hash_1 OK mydb3.my_list_0 OK mydb3.my_list_1 OK mydb3.my_range_0 OK mydb3.my_range_1 OK OK
经过简单测试:重启之后,进行mysql的创建用户,配置权限,执行curd,创建视图,索引等操作,无任何异常,就可以大面积开始集群升级了!
总结:因为这个我的数据库没有大量与5.6不兼容的数据,所以升级很顺利。
操作步骤就是关停mysql服务,一个yum命令搞定!
这种yum的风险应该很大,很容易破坏数据结构和目录,以及mysql_upgrade 执行失败的结果!
因为我们是5.5和5.6版本挨着很近,并且没有大量不兼容数据所以升级很顺利!
如果版本离着很远,有大量不兼容性数据,应该慎重考虑升级策略,并进行大量的备机升级测试和验证,万无一失之后在进行集群性的全面升级~
小小的失误,会导致不可挽回的悲剧,切记切记!