前言:今天在centOS上將mysql版本由5.1升級到5.7的時候出現了各種問題,不過經過一步步的調查解決了問題,下面就記錄一下過程,其中經歷了很多次的卸載和刪除,在這次記錄的過程中,我就按照最後成功的一次順序來記錄,對於其中可能出現的一些錯誤會做特殊的說明。
1.下載Linux的5.7版本,主要需要兩個文件
MySQL-server-5.7.4_m14-1.el6.x86_64.rpm MySQL-client-5.7.4_m14-1.el6.x86_64.rpm
2.備份數據庫文件
mysqldump -uxxx -pxx databasename > databasename.sql
3.停止mysql服務
service mysql stop4.剛開始使用的yum安裝的,使用以下語句進行卸載
yum remove mysql*5.然後刪除mysql舊版本已經存在的文件或者數據,不然mysql在重新安裝後會出現各種糾結的問題。
find / -name mysql ps -ef | grep -i mysql rm -rf mysql**** kill -9 mysqlid注意/usr/bin、/usr/share/、/var/lib下有很多mysql開頭的文件,都刪除掉,還有刪除/etc目錄下的my.cnf文件
rpm -qa | grep -i name rpm -e mysqlxxxxx7.卸載刪除干淨後,再使用以下命令對下載的server和client進行安裝
rpm -ivh mysqlxxx8.我將my.cnf中的一部分進行了優化,按照我們的項目需要做了調整,拿出來做為參照
[mysqld] 2 datadir=/var/lib/mysql 3 socket=/var/lib/mysql/mysql.sock 4 #user=mysql 5 6 # Disabling symbolic-links is recommended to prevent assorted security risks 7 symbolic-links=0 8 #設置2進制日志文件目錄 9 log-bin=mysql-bin
#10行不設置的話,會報一個莫名的錯誤
10 server-id=1 11 #指定索引的緩沖區大小,4G內存下設置256或者384合適 12 key_buffer_size = 256M 13 #每打開一個表,都會讀入數據到table_open_cache中, 14 table_open_cache = 256 15 #用於ORDER BY時的緩沖大小,是針對的每個連接,所以不能太大 16 sort_buffer_size = 256K 17 #對表進行順序掃描的請求 18 read_buffer_size = 256K 19 #任意順序讀取行時 20 read_rnd_buffer_size = 512K 21 #查詢到內容向網絡傳輸時 22 net_buffer_length = 8K 23 #保存在緩存中的線程數量, 24 thread_cache_size = 20 25 ##由於項目中一些表的增刪改相對比較頻繁,但是查詢也占據了很大的一部分,還需要項目運行後觀察一段時間 26 query_cache_size= 8M 27 # 和cpu的核心數有2倍的關系,我使用的是雲服務器,設置這個參數後就啟動不起來了 28 #thread_concurrency = 12 29 30 #提交事務後數據寫入磁盤的時間點,設置為2可以對沒有強烈的安全要求機制下,對速度提高很大 31 innodb_flush_log_at_trx_commit = 2 32 33 #如果使用mysql命令登錄客戶端的時候報權限錯誤或者密碼的錯誤,可以通過開啟標記跳過驗證,直接通過mysql進行連接,然後再修改用戶名權限 34 #skip-grant-tables 35 36 [mysqld_safe] 37 log-error=/var/log/mysqld.log 38 pid-file=/var/run/mysqld/mysqld.pid9.在安裝的過程中出現了mysql error 1524錯誤,沒有找出來是什麼原因,可以通過設置skip-grant-tables跳過錯誤,然後又出現了error 1045(28000)錯誤,我把8步驟中的user=mysql注釋掉了,這個過程中還出現了其他一些錯誤,暫時記不起來了,然後通過以上的設置後,再重啟mysql服務後,就可以通過mysql -uxxx -pxx進行登錄了,然後又出現了一個問題error 1820,然後查資料說通過以下操作進行實現
mysql> create database ttt; ERROR 1820 (HY000): You must SET PASSWORD before executing this statement mysql> set password = password("root"); Query OK, 0 rows affected (0.00 sec)
10.ok,終於正常了,然後通過source命令把sql文件導入。