目前公司部署MySQL是通過平臺化操作的,周五的時候,平臺暫時出了點兒問題,手上有個需求比較著急,就直接手動的部署了一下,由于好長時間沒有部署環境了,竟然有些手生,這里把部署的步驟以及遇到的問題記錄下來,希望對大家有所幫助。
1、一般情況下,部署有三種常用的方式,第一種是yum的方式,也就是rpm包,第二種是源碼的方式,也就是source code,第三種是二進制包,也就是tar.gz格式的包,解壓之后即可,我采用的是第三種方法,部署的MySQL版本是5.5.19版本。
2、首先來看下錯誤吧:
1
2
3
4
5
6
7
8
9
10
|
啟動服務的語句: /usr/ local /mysql-5.5.19-linux2.6-x86_64/bin/mysqld_safe --defaults=/data/mysql_4310/my.cnf & [Note] InnoDB: Waiting for purge to start [Note] InnoDB: Percona XtraDB (http://www.percona.com) 5.7.16-10 started; log sequence number 0 [Note] Plugin 'FEDERATED' is disabled. 20190621_11:25:41mysqld: Table 'mysql.plugin' doesn 't exist [ERROR] Can' t open the mysql.plugin table . Please run mysql_upgrade to create it. [ERROR] unknown variable 'thread_concurrency=8' [ERROR] Aborting |
可以看到,一共報了兩個錯誤,第一個是不能打開mysql.plugin這個表,第二個錯誤是參數錯誤,這個參數thread_concurrency無法識別。
對于第二個問題,可以確認是配置文件里面的參數問題,因為我使用的是常規的5.7的配置文件,改了幾個參數,所以這個參數很有可能是漏改了,改掉即可。主要是第一個問題,這個時候,我進行了下面的嘗試。
3、解決方式
嘗試1:嘗試重新啟動
使用service mysql start的方法:
1
2
|
[root] # service mysql_4310 start Starting MySQL.....The server quit without updating PID fil[FAILED] /mysql_4310/tmp/mysql .pid). |
發現服務還是無法啟動,錯誤日志的輸出不變。
嘗試2:看到了錯誤后面的提示,運行mysql_upgrade方法
1
2
3
4
5
6
|
[root bin]# ./mysql_upgrade --protocol=tcp -P4310 -p Enter password : Looking for 'mysql' as : ./mysql Looking for 'mysqlcheck' as : ./mysqlcheck Running 'mysqlcheck' with connection arguments: '--protocol=tcp' '--port=4310' ./mysqlcheck: Got error: 2003: Can 't connect to MySQL server on ' localhost' (111) when trying to connect |
看來還是不行,這個時候我嚴重懷疑是配置文件的問題:。
嘗試3:從線上環境中搞來了一個mysql5.5的配置文件,然后重新替換新的配置文件,重新啟動:
1
2
3
4
5
|
[root@ mysql_4310]# /usr/ local /mysql-5.5.19-linux2.6-x86_64/bin/mysqld_safe --defaults-file=/data/mysql_4310/my.cnf & [1] 63529 [root@ mysql_4310]# 190621 11:51:37 mysqld_safe Logging to '/data/mysql_4310/log/hb30_web_wechat_answers-121_246.err' . 190621 11:51:37 mysqld_safe Starting mysqld daemon with databases from /data/mysql_4310/data 190621 11:51:40 mysqld_safe mysqld from pid file /data/mysql_4310/tmp/mysql.pid ended |
查看錯誤日志:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
查看錯誤日志: [Note] Plugin 'FEDERATED' is disabled. -5.5.19-linux2.6-x86_64/bin/mysqld: Unknown error 1146 [ERROR] Can 't open the mysql.plugin table. Please run mysql_upgrade to create it. InnoDB: The InnoDB memory heap is disabled InnoDB: Mutexes and rw_locks use GCC atomic builtins InnoDB: Compressed tables use zlib 1.2.3 InnoDB: Using Linux native AIO InnoDB: Initializing buffer pool, size = 4.0G InnoDB: Completed initialization of buffer pool t specified data file /data/mysql_4310/ibdata1 did not exist: tabase to be created! InnoDB: Setting file /data/mysql_4310/ibdata1 size to 1000 MB physically writes the file full: wait... in MB: 100 200 300 400 500 600 700 800 900 1000 InnoDB: Data file /data/mysql_4310/ibdata2 did not exist: new to be created InnoDB: Setting file /data/mysql_4310/ibdata2 size to 100 MB physically writes the file full: wait... in MB: 100 og file /data/mysql_4310/innodblog/ib_logfile0 is of different size 0 1073741824 bytes cified in the .cnf file 0 134217728 bytes! [ERROR] Plugin ' InnoDB ' init function returned error. [ERROR] Plugin ' InnoDB' registration as a STORAGE ENGINE failed. [ERROR] Aborting |
發現最先面出現了新的錯誤,提示Innodb 初始化函數返回了錯誤,無法使用innodb存儲引擎。到這里,我開始懷疑是不是初始化的時候,就有錯誤,導致服務不可用,于是想著重新初始化一遍數據字典,重新起服務,看看行不行。
嘗試4:重新初始化數據字典
嘗試使用initialize-insecure方法重新初始化,發現失敗了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[root mysql_4310]# /usr/ local /mysql-5.5.19-linux2.6-x86_64/bin/mysqld --initialize-insecure --defaults-file=/data/mysql_4310/my.cnf --datadir=/data/mysql_4310/data --basedir=/usr/local/mysql-5.5.19-linux2.6-x86_64 & [1] 7045 [1]+ Exit 2 /usr/ local /mysql-5.5.19-linux2.6-x86_64/bin/mysqld --initialize-insecure --defaults-file=/data/mysql_4310/my.cnf --datadir=/data/mysql_4310/data --basedir=/usr/local/mysql-5.5.19-linux2.6-x86_64 |
錯誤日志還是之前的日志,提示mysql.plugin表不存在,除此之外,還多了一行,如下:
1
|
[ERROR] /usr/ local /mysql-5.5.19-linux2.6-x86_64/bin/mysqld: unknown option '--initialize-insecure' |
于是上官方文檔上面查看了--initialize-insecure參數,發現這個參數在mysql5.5版本沒有,然后5.5版本的是initialize參數,于是換成這個initialize參數,重新初始化,然后報錯如下:
1
2
3
|
[root@ ]/usr/ local /mysql-5.5.19-linux2.6-x86_64/bin/mysqld --defaults-file=/data/mysql_4310/my.cnf --datadir=/data/mysql_4310/data --basedir=/usr/local/mysql-5.5.19-linux2.6-x86_64 --initialize & [1]+ Exit 2 /usr/ local /mysql-5.5.19-linux2.6-x86_64/bin/mysqld --defaults-file=/data/mysql_4310/my.cnf --datadir=/data/mysql_4310/data --basedir=/usr/local/mysql-5.5.19-linux2.6-x86_64 --initialize |
此時,查看官方文檔,發現MySQL5.5版本的初始化使用的是mysql_install_db命令而不是mysqld命令,而mysql_install_db這個工具不在/usr/local/mysql-5.5.19-linux2.6-x86_64/bin目錄中,而在/usr/local/mysql-5.5.19-linux2.6-x86_64/scripts目錄下面,于是通過cp命令將其拷貝到指定目錄,然后進行初始化,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
[root@ mysql_4310]# /usr/ local /mysql-5.5.19-linux2.6-x86_64/bin/mysql_install_db --defaults-file=/data/mysql_4310/my.cnf [root@ mysql_4310]# ll | grep install [root@ mysql_4310]# /usr/ local /mysql-5.5.19-linux2.6-x86_64/bin/mysql_install_db --defaults-file=/data/mysql_4310/my.cnf --datadir=/data/mysql_4310/data --basedir=/usr/local/mysql-5.5.19-linu [1] 16365 [root@ mysql_4310]# Installing MySQL system tables... OK Filling help tables... OK To start mysqld at boot time you have to copy support-files/mysql.server to the right place for your system PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER ! To do so, start the server, then issue the following commands: /usr/ local /mysql-5.5.19-linux2.6-x86_64/bin/mysqladmin -u root password 'new-password' /usr/ local /mysql-5.5.19-linux2.6-x86_64/bin/mysqladmin -u root -h tk01-devt-mysql-7-200 password 'new-password' Alternatively you can run: /usr/ local /mysql-5.5.19-linux2.6-x86_64/bin/mysql_secure_installation which will also give you the option of removing the test databases and anonymous user created by default . This is strongly recommended for production servers. See the manual for more instructions. You can start the MySQL daemon with : cd /usr/ local /mysql-5.5.19-linux2.6-x86_64 ; /usr/ local /mysql-5.5.19-linux2.6-x86_64/bin/mysqld_safe & You can test the MySQL daemon with mysql-test-run.pl cd /usr/ local /mysql-5.5.19-linux2.6-x86_64/mysql-test ; perl mysql-test-run.pl Please report any problems with the /usr/ local /mysql-5.5.19-linux2.6-x86_64/scripts/mysqlbug script! [1]+ Done /usr/ local /mysql-5.5.19-linux2.6-x86_64/bin/mysql_install_db --defaults-file=/data/mysql_4310/my.cnf --datadir=/data/mysql_4310/data --basedir=/usr/local/mysql-5.5.19-linux2.6-x86_64 |
結果成功。
總結如下:
1、MySQL5.5版本的初始化使用mysql_install_db工具,而不是mysqld工具
2、MySQL5.5版本的初始化使用--initialize參數
以上就是MySQL5.5 部署的一個問題的詳細內容,更多關于MySQL 部署的資料請關注服務器之家其它相關文章!
原文鏈接:https://cloud.tencent.com/developer/article/1533427