一) 下載免安裝包:
mysql下載地址: https://dev.mysql.com/downloads/mysql/
下載時(shí),選擇以前5.7版本:

下載第一個(gè)TAR壓縮包:

二) 定義安裝路徑并解壓安裝包
1、假設(shè)需要把MySQL放到 /usr/local/qhs/mysql5.7 目錄下運(yùn)行, 則手工創(chuàng)建目錄 /usr/local/qhs/mysql5.7, 下文把此目錄稱為【安裝目錄】
2、上傳壓縮包到 【安裝目錄】 下; 執(zhí)行 如下命令
[root@localhost~]# tar -xzvf mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz
會(huì)在目錄下解壓出 mysql-5.7.35-linux-glibc2.12-x86_64 目錄,該目錄即為mysql的運(yùn)行目錄,此目錄下有 bin 等mysql目錄;
三)創(chuàng)建系統(tǒng)mysql組和mysql用戶
檢查mysql組和用戶是否存在,如無(wú)則創(chuàng)建
[root@localhost~]# cat /etc/group | grep mysql
[root@localhost~]# cat /etc/passwd | grep mysql
若不存在,則創(chuàng)建如下:
# 創(chuàng)建mysql用戶組
[root@localhost~]# groupadd mysql
# 創(chuàng)建一個(gè)用戶名為mysql的用戶,并加入mysql用戶組
[root@localhost~]# useradd -g mysql mysql
# 制定password 為mysql
[root@localhost~]# passwd mysql
Changing password for user mysql.
New password:
BAD PASSWORD: The password is a palindrome
Retype new password:
passwd: all authentication tokens updated successfully.
四)更改【安裝目錄】所屬的組和用戶
cd /usr/local/qhs/
# 更改所屬的組和用戶
[root@localhost local]# chown -R mysql mysql5.7/
[root@localhost local]# chgrp -R mysql mysql5.7/
五)創(chuàng)建mysql的數(shù)據(jù)目錄和日志目錄
# 創(chuàng)建數(shù)據(jù)和日志存儲(chǔ)目錄(目錄可以隨意指定,但必須存在,這兩個(gè)目錄在下一步中會(huì)使用,這兩個(gè)目錄的所有者必須是mysql用戶)
[root@localhost mysql5.7]# cd /usr/local/qhs/mysql5.7/
[root@localhost mysql]# mkdir data
[root@localhost mysql]# mkdir logs
# 修改所有者
[root@localhost mysql]# chown -R mysql:mysql data
六)定義mysql的 my.cnf 文件
此文件是mysql的運(yùn)行定義文件,需要根據(jù)實(shí)際情況修改,然后放置到指定目錄下,一般情況下,如果不特別說明(比如系統(tǒng)中只有一個(gè)MySQL),就放在 /etc 目錄下;如果系統(tǒng)需要裝多個(gè)mysql,那么每個(gè)MySQL對(duì)應(yīng)的 my.cnf 文件就需要放在各自配置的目錄下:
創(chuàng)建 my.cnf文件
my.cnf內(nèi)容如下:
[mysqld] #下面語(yǔ)句的作用主要是當(dāng)前本機(jī)登錄不需要密碼,可以注釋掉 skip-grant-tables #mysql安裝目錄,也就是 mysql的 bin 的父目錄 basedir=/usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64/ #mysql數(shù)據(jù)庫(kù)目錄,也就是上面步驟創(chuàng)建的data目錄,必須存在 datadir=/usr/local/qhs/mysql5.7/data #mysql數(shù)據(jù)庫(kù)監(jiān)聽端口,可以按需修改,不同mysql開啟不同的端口 port = 3307 character_set_server=utf8 max_allowed_packet = 512M innodb_log_file_size = 2048M [mysqld_safe] #錯(cuò)誤日志,也就是上面步驟創(chuàng)建的data目錄下的一個(gè)文件,此文件可以不存在 log-error=/usr/local/qhs/mysql5.7/data/error.log #pid文件,此配置項(xiàng)有的說不需要,反正我配置上是沒有問題的,data目錄必須存在 pid-file=/usr/local/qhs/mysql5.7/data/mysqld.pid #臨時(shí)目錄可以不存在,只要指定就好 tmpdir=/tmp/mysql5.7 # # include all files from the config directory # #!includedir /etc/my.cnf.d ## 不建議開日志,所有的操作都記錄文件太大 # general-log=1 # log-output=FILE # general-log-file=/data_disk/mysql/logs/mysql.log slow_query_log=1 long_query_time=3 slow_query_log_file=/data_disk/mysql/logs/slowquery.log # 允許最大連接數(shù) max_connections=200 # 服務(wù)端使用的字符集默認(rèn)為8比特編碼的latin1字符集 character-set-server=utf8 # 創(chuàng)建新表時(shí)將使用的默認(rèn)存儲(chǔ)引擎 default-storage-engine=INNODB lower_case_table_names=1 max_allowed_packet=16M
場(chǎng)景一: 系統(tǒng)只有一個(gè)MySQL,放在默認(rèn)目錄 /etc/ 下(強(qiáng)烈建議按照?qǐng)鼍岸渲?,因?yàn)槲沂怯玫膱?chǎng)景二,主要是不知道當(dāng)修改了data目錄后,是否需要按照?qǐng)鼍岸バ薷膕upport-files文件里的內(nèi)容):
# 進(jìn)入/etc文件夾下 [root@localhost mysql]# cd /etc # 編輯my.cnf [root@localhost etc]# vim my.cnf
場(chǎng)景二: 系統(tǒng)有多個(gè)MySQL,放在各自配置目錄下,例如本例放在 /usr/local/mysql5.7/ mysql-5.7.35-linux-glibc2.12-x86_64/目錄下(建議放到my.cnf的basedir 目錄下,以免有各種問題):
放在目錄下之后,還需要配置如下,進(jìn)入mysql運(yùn)行目錄的support-files文件夾(與bin同級(jí)), 編輯mysql.server文件
#和上面 my.cnf 的配置一樣,是mysql的運(yùn)行目錄 basedir=/usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64/ #和上面 my.cnf 的配置一樣,是mysql的data目錄 datadir=/usr/local/qhs/mysql5.7/data/ #沒搞清楚,我是原樣使用,反正配置時(shí)沒有這個(gè)文件 lockdir='/var/lock/subsys5.7' #沒搞清楚,我是原樣使用,反正配置時(shí)沒有這個(gè)文件 lock_file_path="$lockdir/mysql5.7" #沒搞清楚,我是原樣使用,也就是data目錄加一個(gè)pid文件,此文件運(yùn)行時(shí)生成 mysqld_pid_file_path=/usr/local/mysql5.7/data/mysqld.pid #?。?! (非常重要) 搜索conf后再修改,這個(gè)在else語(yǔ)句里面, 這里的值就是當(dāng)前MySQL的 my.cnf 文件所在位置(非常重要) ?。。?conf=/usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64/my.cnf
七) 初始化mysql
[root@localhost mysql] /usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64/mysqld --initialize-insecure --datadir=/usr/local/qhs/mysql5.7/data/ --basedir=/usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64/ --user=mysql
八)安全模式啟動(dòng)mysql
通過mysqld_safe啟動(dòng)
[root@localhost mysql]# /usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64/mysqld_safe --defaults-file=/usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64/my.cnf --skip-grant-tables --skip-networking &
#添加--skip-networking參數(shù),讓實(shí)例關(guān)閉監(jiān)聽端口,自然也就無(wú)法建立TCP連接,而只能通過本地socket進(jìn)行連接。
啟動(dòng)后,通過另外一個(gè)SSH命令窗口執(zhí)行如下步驟
九)修改root密碼,授權(quán)root遠(yuǎn)程連接
如下修改后,可通過執(zhí)行 /usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64/mysql -uroot -p 來驗(yàn)證密碼
[root@localhost mysql]# /usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64//bin/mysql
>mysql> flush privileges;
>mysql> update mysql.user set authentication_string=password('Abcd123456') where host='localhost' and user='root';
>mysql> grant all privileges on *.* to 'root'@'%' identified by 'Abcd123456';
>mysql> flush privileges;
>mysql> exit
八) 把mysql啟動(dòng)做成服務(wù)
復(fù)制該mysql.server文件到/etc/init.d并重命名為mysql5.7(可按自己需要命名)
[root@localhost mysql] cp -i /usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64/support-files/mysql.server /etc/init.d/mysql5.7
九) 啟動(dòng)/停止服務(wù)
[root@localhost mysql] service mysql5.7 {start|stop|restart|reload|force-reload|status}
#啟動(dòng)時(shí),如果拋錯(cuò),可以到error日志中查看。
# 1---比如出現(xiàn)ERROR! The server quit without updating PID file /usr/local/develop/db/mysql5.7/data/mysqld.pid). 就說明進(jìn)程起不來,而日志中提示
#[ERROR] Could not create unix socket lock file /var/lib/mysql/mysql.sock.lock.
#則需要手工創(chuàng)建文件夾/var/lib/mysql/ 并執(zhí)行 chown -R mysql:mysql /var/lib/mysql/ 給它賦權(quán);
#還有可能出現(xiàn)自定義的 my.cnf 被忽略的提示,這是因?yàn)?my.cnf 的權(quán)限不能是777 而應(yīng)該是644,否則mysql會(huì)取默認(rèn)的 /etc/ 下面的my.cnf
十)重啟電腦
十一)啟動(dòng)mysql
把 my.cnf 文件中的 skip-grant-tables 注釋掉
service mysql5.7 start|
十二)阿里云的注意事項(xiàng)
如果是阿里云上安裝的mysql,還需要在實(shí)例的安全組屬性中,添加3306(或?qū)?yīng)端口)端口打開規(guī)則
點(diǎn)擊ECS實(shí)例名稱,進(jìn)入ECS詳情頁(yè)面,在頁(yè)面上可以查看該ECS的各種屬性,其中就有一項(xiàng)是 安全組屬性(千萬(wàn)不能直接用左邊導(dǎo)航菜單的安全組,那個(gè)和當(dāng)前ECS實(shí)例沒有任何關(guān)系,配置了也沒用)
FAQ: 啟動(dòng)失敗一般是對(duì)應(yīng)的日志文件不存在,或者目錄沒有權(quán)限。
如果服務(wù)注冊(cè)失敗,可以通過如下命令直接啟動(dòng)
mysqld --defaults-file=/usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64/my.cnf --user=root &
若啟動(dòng)時(shí)候拋異常: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
則需要建立軟連接:ln -s /usr/local/qhs/mysql5.7/mysql.sock /tmp/mysql.sock