標籤:style blog http color io os 使用 ar strong
MySQL 升級步驟
MySQL 5.1.72 升級到 MySQL 5.5.36
鑒於我在升級的時候遇到的麻煩問題,我覺得有必要把一些細節說清楚,免得引起誤解了。感覺官方文檔上的升級步驟寫的比較簡單,很容易引起混淆,感覺同我當時參照官方文檔學習定製安裝 MySQL 一樣蛋疼。可能真的是外國淫的思維跟我差距太大了。
資料庫情況:本人測試的都是 Linux Generic x86_64 版本的,也是定製安裝到制定的資料庫目錄的。
詳細升級步驟
1.MySQL 5.1.72 啟動的執行個體 ins1
假設你已經安裝了 MySQL 5.1.72,並且成功的啟動了一個執行個體 ins1。軟體可以在官網 MySQL 5.1.72 下載。
2.備份 ins1的資料和設定檔my1.cnf
無論以前操作了多少次升級步驟,升級前備份資料那是必須的!我這裡是測試資料,就直接通過mysqldump 工具備份的,如果是生產庫,可以使用 percona 公司的線上備份工具進行備份。
複製一份my1.cnf到其他位置進行備份,防止升級失敗後能夠快速的恢複 ins1。
3.關閉 ins1
mysqladmin -uroot -p -S $sockdir shutdown
4.通過 MySQL 5.5.36 啟動 執行個體ins1 原來的資料目錄,命名為 ins2
1)修改my1.cnf ,把一些與高版本不相容的參數或者一些廢棄的參數修改成高版本能夠接受的參數。
2)用高版本的 MySQL 5.5.36 來啟動,切記不要用低版本的 MySQL 啟動,那樣 my1.cnf 的修改也米有意義了。
因為高版本的系統庫 mysql database 和低版本的 mysql database 會有一些表是不相容的,所以為了讓高版本的 MySQL 能夠啟動 低版本的系統資料,需要加上參數 --skip-grant-tables 來忽略mysql database 裡授權表(grant tables)的驗證。同時,忽略授權表啟動 MySQL 執行個體 ins2 後, 為了保證 MySQL 執行個體的安全,可以加上參數 --skip-networking 來阻止通過網路來訪問的用戶端。
mysqld_safe --defaults-file=$cnf_path --skip-grant-tables --skip-networking &
5.執行 mysql_upgrade
啟動執行個體 ins2 成功以後,通過高版本的 MySQL 5.5.36 的 bin 目錄 mysql_upgrade 命令來升級 ins2
mysql_upgrade -uroot -p -S $socket_path
這個步驟實際執行的內容(來源於手冊):
mysqlcheck --all-databases --check-upgrade --auto-repairmysql < fix_priv_tablesmysqlcheck --all-databases --check-upgrade --fix-db-names --fix-table-names
如果看到最後面顯示的OK,表示成功了
...mysql.time_zone_transition_type OKmysql.user OKpercona51.ptablet OKRunning ‘mysql_fix_privilege_tables‘...OK
6.重啟 mysql 執行個體ins2
用MySQL 5.5.36 的二進位包(不是 MySQL 5.1.72)
mysqladmin -uroot -p -S $sockdir shutdown#這次正常啟動,不需要帶上其他參數。mysqld_safe --defaults-file=$cnf_path &
Percona Server 5.1.61 升級到 Percona Server 5.5.39
Percona Server 是 Percona 公司根據 MySQL 存在的一些效能上的缺陷進行改進,從而形成了一個新的免費的 MySQL 版本。 他們的升級文檔就是三個字來形容就是 “太簡單”,為了把一些步驟說清楚,也為了我以後少走點彎路,我還是把我升級步驟詳細的羅列出來,以供日後查閱吧。
這次升級我從安裝 Percona Server 執行個體開始講述,因為 Percona 的設定檔和 MySQL 還是有部分區別的,新手用二進位檔案安裝的話可能需要一回來尋找執行檔案。
1.安裝 Percona Server 5.1.61 執行個體 P1
1)下載 Percona Server 5.1.61
2)解壓縮檔案,然後進入到安裝目錄下。
我這裡是 /home/devops/Percona-Server-5.1.61
3)根據 設定檔來檔案:Percona5.1.txt 安裝系統庫目錄
這個目錄是針對我自己的安裝目錄,參數需要根據自己的 OS 進行調整。主要需要注意的是如下幾個參數:
#這兩個參數在高版本的參數檔案中需要調整ledir = /home/devops/Percona-Server-5.1.61/libexeclanguage = /home/devops/Percona-Server-5.1.61/share/mysql/english#根據自己記憶體大小來調整innodb_buffer_pool_size = 256M
設定檔穿件完畢後,安裝系統庫。執行命令:
./bin/mysql_install_db --defaults-file=/home/devops/cnf/mysql4308.cnf --basedir=/home/devops/Percona-Server-5.1.61
4)驗證系統庫是否安裝成功
要驗證系統庫是否安裝成功,可以在參數檔案中指定的data-dir目錄下看看是否有 mysql,test檔案夾,以及mysql檔案夾下面是否有很多以 frm、MYI、MYD 接尾的系統檔案。
5)啟動執行個體 P1
$ cd /home/devops/Percona-Server-5.1.61/bin./mysqld_safe --defaults-file=/home/devops/cnf/mysql4308.cnf &# ps -ef | grep 4308 驗證是否成功,如果沒有,請看看 MySQL 錯誤記錄檔,是否哪裡的參數出現了問題。
2.備份5.1參數檔案,修改參數檔案來滿足 Percona 5.5 的參數要求(重要!!)
備份 mysql4308.cnf :$ cp mysql4308.cnf mysql4308_bak.cnf。修改 mysql4308.cnf 來符合 Percona Server 5.5.36 的參數需求,具體的差異可以查看 Percona文檔,本人操作的時候主要修改了如下的幾個參數:
ledir = /home/devops/percona/percona5.5.39/binlc-messages-dir =/home/devops/percona/percona5.5.39/share
修改後的參數檔案 檔案:Percona5.5.txt
3.關閉 執行個體 P1,用 Percona Server 5.5.39 以(skip-grant-tables)方式啟動 執行個體 P2
1)下載Percona Server 5.5.39 http://www.percona.com/redir/downloads/Percona-Server-5.5/Percona-Server-5.5.39-36.0/binary/tarball/Percona-Server-5.5.39-rel36.0-697.Linux.x86_64.tar.gz,解壓縮。
2)重啟 MySQL
這次是第一次用高版本的 MySQL軟體啟動低版本的資料,避免許可權表的驗證,需要加上 skip-grant-tables 參數。
cd /home/devops/percona/percona5.5.39/bin./mysqladmin -uroot -p -S /home/devops/mysql4308/mysqld.sock shutdown./mysqld_safe --defaults-file=/home/devops/cnf/mysq4308.cnf --skip-grant-tables --skip-networking &
note: 最後一步執行mysqld_safe的時候,很可能因為參數檔案的參數不能被識別而導致出現啟動錯誤,請根據錯誤記錄檔的提示來修正。
4.執行 Percona Server 5.5.36 的 mysql_upgrade
./mysql_upgrade -uroot -p -S /home/devops/mysql4308/mysqld.sock
執行後如果出現下面的情況,表示 OK 了。
......mysql.user OKpercona51.ptablet OKRunning ‘mysql_fix_privilege_tables‘...OK
5.關閉執行個體 P2,然後重啟 MySQL
cd /home/devops/percona/percona5.5.39/binmysqladmin -uroot -p -S /home/devops/mysql4308/mysqld.sock shutdown./mysqld_safe --defaults-file=/home/devops/cnf/mysq4308.cnf &
6.驗證是否成功
./mysql -uroot -p -S /home/devops/mysql4308/mysqld.sock
mysql> status--------------./mysql Ver 14.14 Distrib 5.5.39-36.0, for Linux (x86_64) using readline 5.1....Server version: 5.5.39-36.0-log Percona Server (GPL), Release 36.0, Revision 697....
可以看到版本是 5.5.39-36.0的了。
Percona Server 5.1.61 升級到 MySQL 5.5.36
可能是因為 Percona 和 MySQL 對於系統資料表空間的解讀方式不一致,我在升級以後,發現無法用 MySQL 5.5.36 來啟動 Percona Server 5.1.61 的執行個體。錯誤記錄檔提示的是 共用資料表空間無法開啟,暫時先不這麼跨軟體升級,以後閑的時候可以再看看兩者的區別。
目前只是知道 Percona 對 MySQL 做了一些效能上的最佳化與拓展。
Percona5.1.txt
[client]port = 4308socket = /home/devops/mysql4308/mysqld.sock[mysqld_safe]user = devopsnice = 0#ledir = /home/devops/percona/percona5.5.39/binledir = /home/devops/Percona-Server-5.1.61/libexec#ledir = /home/mysql/#mysqld = @home_mysql_mysql_libexec_mysqld[mysqld]server-id = 2949bind-address = localhostport = 4308pid-file = /home/devops/mysql4308/mysqld.pidsocket = /home/devops/mysql4308/mysqld.sockbasedir = /home/devops/percona/Percona-Server-5.1.61datadir = /home/devops/mysql4308innodb_data_home_dir = /home/devops/mysql4308innodb_log_group_home_dir = /home/devops/mysql4308tmpdir = /home/devops/mysql4308log-error = /home/devops/mysql4308/mysqld.logslow_query_log = 2slow_query_log_file = /home/devops/mysql4308/mysql-slow.log log_bin = /home/devops/mysql4308/mysql-bin.logbinlog_format = MIXEDrelay-log = mysqld-relay-binuser = devopslanguage = /home/devops/Percona-Server-5.1.61/share/mysql/english#lc-messages-dir =/home/devops/percona/percona5.5.39/sharetable_cache = 512long_query_time = 5max_connections = 300query_cache_type = 0character-set-server = utf8#default-character-set = utf8default-storage-engine = innodbskip-external-lockingexpire_logs_days = 7max_binlog_size = 100Mmax_allowed_packet = 16M# innodb plugininnodb_buffer_pool_size = 256Minnodb_data_file_path = ibdata1:64M:autoextendinnodb_autoextend_increment = 16innodb_log_files_in_group = 2innodb_log_file_size = 64Minnodb_lock_wait_timeout = 5innodb_flush_method = O_DIRECTinnodb_flush_log_at_trx_commit = 0innodb_file_per_table = 1innodb_file_format = Barracudainnodb_file_format_check = ON#innodb_adaptive_checkpoint = estimate#innodb_expand_import = 1innodb_read_io_threads = 8#innodb_stats_method = nulls_unequal#innodb_strict_mode = 1innodb_thread_concurrency = 12innodb_write_io_threads = 3innodb_read_io_threads = 3innodb_io_capacity = 200#innodb_adaptive_flushing = false# perconainnodb_page_size=8k#innodb_extra_rsegments=8#innodb_use_purge_thread=4#innodb_stats_update_need_lock=0#innodb_fast_checksum=1#log_slow_verbosity=full#userstat_running=1#enable_query_response_time_stats=1# percona For SSD#innodb_adaptive_checkpoint=3#innodb_flush_neighbor_pages=0[mysqldump]quickquote-namesmax_allowed_packet = 16Mdefault-character-set = utf8[mysql]default-character-set = utf8
View Code
Percona5.5.txt
View Code
MySQL 升級詳細步驟 (包括 Percona)