線上環境MySQL5.5升級至5.6

84223932發表於2016-10-17

本文主要記錄了線上環境percona5.5.35升級到5.6.32-78.0的過程。


歡迎轉載,請註明作者、出處。
作者:張正
blog:http://space.itpub.net/26355921 
QQ:176036317
如有疑問,歡迎聯絡。


        因需要對線上一組伺服器做遷移,而且之前的版本是5.5.35,遷移後的版本為5.6.32-78.0,使用搭建級聯從庫的方式,然後做切換。使用xtrabackup備份恢復出來,5.6的版本 錯誤日誌中頻繁報錯:
7fc52806d700 InnoDB: Error: Fetch of persistent statistics requested for table "xxx"."xxx" 
but the required system tables mysql.innodb_table_stats and mysql.innodb_index_stats are not present or 
have unexpected structure. Using transient stats instead.

        因為資料檔案是percona5.5的,直接恢復到5.6,有些系統表不一致,因此需要做升級。查閱官方文件後,給出了升級條件,如下:
將5.5的檔案 upgrade成5.6版本(in place upgrade)
1、crash後的例項不應該直接做升級,應該先做crash recovery,然後再做升級   
2、之前的percona-server 資料頁不是16K的也不建議做升級                  
3、如果5.5版本中innodb_fast_checksum開啟,則無法使用in place upgrade  

        滿足條件後,即可進行升級,同樣官方文件給出的步驟如下:
1、安裝percona5.6版本的server、client、shared
2、使用--skip-grant-tables 啟動
3、使用mysql_upgrade升級
4、重啟例項(不加--skip-grant-tables,正常啟動)

If it can’t find the pid file, kill the server and start it normally:
$ killall /usr/sbin/mysqld
$ /sbin/service mysql start

        實際操作步驟:
    1、伺服器上percona5.6相關軟體已經安裝好
    2、關閉該例項,然後使用mysqld  加上--skip-grant-tables啟動mysqld
    3、使用mysql_upgrade --socket=/data/mysqlxxxx/mysqldxxxx.sock
    結果報錯:
    
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.innodb_index_stats                           OK
mysql.innodb_table_stats                           OK
mysql.ndb_binlog_index                             OK
mysql.plugin                                       OK
mysql.proc                                         OK
mysql.procs_priv                                   OK
mysql.proxies_priv                                 OK
mysql.servers                                      OK
mysql.slave_master_info                            OK
mysql.slave_relay_log_info                         OK
mysql.slave_worker_info                            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'...
ERROR 1010 (HY000) at line 150: Error dropping database (can't rmdir './performance_schema/', errno: 17)
ERROR 1007 (HY000) at line 155: Can't create database 'performance_schema'; database exists
FATAL ERROR: Upgrade failed


    仔細檢查後,發現是因為performance_schema資料庫目錄下 有其他非 資料庫檔案,因此mysql_upgrade刪除時報錯,手動刪除performance_schema目錄下的非資料庫檔案後,再次執行升級,這一步過了,但是又發生了報錯:
    
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.innodb_index_stats                           OK
mysql.innodb_table_stats                           OK
mysql.ndb_binlog_index                             OK
mysql.plugin                                       OK
mysql.proc                                         OK
mysql.procs_priv                                   OK
mysql.proxies_priv                                 OK
mysql.servers                                      OK
mysql.slave_master_info                            OK
mysql.slave_relay_log_info                         OK
mysql.slave_worker_info                            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'...
Running 'mysqlcheck' with connection arguments: '--socket=/data/mysql3307/data/mysqld3307.sock'
mysqlcheck: Got error: 1045: Access denied for user 'root'@'localhost' (using password: NO) when trying to connect
FATAL ERROR: Error during call to mysql_check for fixing the db/tables names on all db(s) except mysql


    是因為root許可權問題,mysqld開啟了--skip-grant-tables,應該是不需要密碼得。但是在執行mysql_upgrade時,到了一定步驟,總是會報這樣的錯,因此建議使用mysql_upgrade時,一般都給加上root的使用者名稱密碼。再次執行:
    mysql_upgrade -uroot -pxxxxx --socket=/data/mysqlxxxx/mysqldxxxx.sock
.......................
xxxxxxx....... ok
OK
    4、重啟mysqld

至此,percona5.5 至 percona5.6升級完畢。

檢查一下錯誤日誌,發現沒有報錯了。

     注意:如果主庫是5.5版本,從庫是5.6版本,在從庫的錯誤日誌中會發現報錯:
[Warning] Slave I/O: Unknown system variable 'SERVER_UUID' on master. A probable cause is that the variable is not supported on the master (version: 5.5.35-33.0-log), even though it is on the slave (version: 5.6.32-78.0-log), Error_code: 1193
        查閱相關文章,說這個不用擔心:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26355921/viewspace-2126568/,如需轉載,請註明出處,否則將追究法律責任。

相關文章