前幾天接了個接口項目,按照網上教程安裝mysql數據庫時出現了一堆問題(捂臉),一頓操作後終於成功起起來了。記錄下以免之後再遇到同樣問題。
最主要的一個問題是MySql 5.7以上 與 MySql5.6以下的版本在安裝時大相徑庭,5.6以下版本一般都會提供默認配置文件,5.7以上就不會,比如data文件夾,tmp文件夾等等。並且兩者在初始化時的 命令也不一樣,如果在5.7以上使用5.6以下的初始化命令,系統會發出警告並提示你該用哪個新的命令,這時候如果沒注意就。。。(捂臉),而且5.7以後版本在初始化配置後會提供一個隨機生成的初始密碼。
首先下載mysql
MySql
選擇Linux - Generic (glibc 2.12) (x86, 64-bit), Compressed TAR Archive下載即可
我這裏下載的是mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz
剛纔上官網看了下,最新的變成8了,這個安裝方式是否與5.7相同我就不清楚了(捂臉)
1.把下載完的文件上傳到linux服務器,開始解壓。
tar -xvzf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz
2.解壓改下名字,方便後續操作。我這裏命名爲mysql。
mv mysql-5.7.22-linux-glibc2.12-x86_64 mysql
3.新建用戶組合用戶。
有可能出現該用戶組和用戶已經存在,這裏是刪除原先用戶組/用戶還是修改新建用戶組/用戶名都看你喜歡怎麼弄了。
groupadd mysql
useradd -r -g mysql mysql
4.修改mysql根目錄用戶權限
進入剛纔重命名後的mysql文件夾執行修改權限命令
cd mysql
chown -R mysql .
chgrp -R mysql .
或者
cd mysql
chown -R mysql:mysql ./
5.初始化 MySQL 配置表
這裏會有一個不同點
5.6及以下版本使用的是
./scripts/mysql_install_db --user=mysql --basedir=/home/mysql --datadir=/home/mysql/data
//user剛纔新建的用戶名,scripts在mysql目錄下
5.7以上改了,如果還是使用上面那個就會提示讓你用--initialize
命令
./bin/mysqld --initialize --user=mysql --basedir=/home/mysql --datadir=/home/mysql/data
從命令中我們可以知道配置時還需要在mysql目錄下存在一個data文件夾,但是5.7沒有提供這個文件夾,所以我們需要自己在mysql根目錄新建一個data文件夾。
否則會報如下提示:
[WARNING] mysql_install_db is deprecated. Please consider switching to mysqld --initialize
[ERROR] The data directory needs to be specified.
data新建完畢後就可以開始初始化了
./bin/mysqld --initialize --user=mysql --basedir=/home/mysql --datadir=/home/mysql/data
初始化完畢後在命令行最後會提供生成好的隨機密碼,先拷貝下來。
新建完後修改權限
這時候直接初始化會報如下錯誤
error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
是因爲沒有安裝libaio.so.1
運行安裝yum install libaio
,中間會讓你同意下,輸入 y 回車即可
繼續初始化
可以看到最後一行有提供隨機密碼,記錄下來,我這裏是scXcgee)k9jn
然後修改下權限,把除了data外的所有mysql文件的權限都設置爲root
chown -R root .
chown -R mysql data
6.複製配置文件 my-default.cnf
將該文件複製到/etc下,並改名。
cp support-files/my-default.cnf /etc/my.cnf
這裏有一點很重要,就是tmp文件。
首先,如果你的support-files
文件夾下存在my-default.cnf文件,那麼打開看下socket項所指的tmp文件是否存在,如果不存在,則新建,否則會報錯。
如果不存在,很有意思的是我安裝時不存在該文件(捂臉)。
沒辦法,既然沒有提供,那隻能自己建了,然後我發現再etc下已經有一個my.cnf了_(:з」∠*)_
。
這是內容
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
很明顯,這是默認配置,而我是把mysql裝在了home目錄中,所以需要修改配置。
附上我的配置文件my.cnf。
basedir就是mysql根目錄
datadir就是上面在mysql根目錄中新建的data文件夾
socket我在mysql根目錄中新建了一個tmp文件夾,然後這裏就指向了她,mysql.sock這個文件在我們啓動mysql時會自動創建。所以我們只要新建tmp文件夾就行了。
修改下權限
然後最重要的一點來了:如果你的socket指向的地址不在tmp中(linux服務器根目錄中的tmp文件夾)(我指向的地址是/home/mysql/tmp,不在tmp中,要加上client)請在my.cnf中加上[client] socket=/home/mysql/tmp/mysql.sock
項,否在在登入時會報錯誤,就是這個錯誤讓我折騰了好久好久(捂臉)。
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket
‘/tmp/mysql.sock’ (2)
[mysqld]
basedir=/home/mysql
datadir=/home/mysql/data
socket=/home/mysql/tmp/mysql.sock
port=3306
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[client]
socket=/home/mysql/tmp/mysql.sock
[mysqld_safe]
#log-error=/var/log/mariadb/mariadb.log
#pid-file=/var/run/mariadb/mariadb.pid
basedir=/home/mysql
datadir=/home/mysql/data
socket=/home/mysql/tmp/mysql.sock
port=3306
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
7.啓動和關閉mysql
#/etc/init.d/mysql start 或者 serivce mysql start 或者 ./bin/mysqld_safe&
#/etc/init.d/mysql stop 或者 service mysql stop 或者 ./bin/mysqladmin -u root -p shutdown
我一般使用./bin/mysqld_safe&
命令啓動mysql服務
啓動後檢查下ps -ef|grep mysql
檢查下是否啓動
現在沒有啓動
啓動
輸入bg 後臺運行,然後再運行ps -ef|grep mysql
檢查可以看到mysql已經啓動了
7.連接mysql
./bin/mysql -uroot -p
提示輸入密碼,輸入剛纔記下隨機密碼 ,要手動輸入,不能黏貼哦
連接成功。
8.修改密碼
剛纔的密碼只是初始自動生成的隨機密碼,我們在之後如果想要使用mysql的話還需要中心設置下密碼,不然連遠程訪問都幹不了,這裏修改的是root的密碼
9.開啓遠程訪問
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> update user set host = ‘%’ where user = ‘root’;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select host, user from user;
+———–+—————+
| host | user |
+———–+—————+
| % | root |
| localhost | mysql.session |
| localhost | mysql.sys |
+———–+—————+
3 rows in set (0.00 sec)
然後退出mysql連接
重啓生效
/etc/init.d/mysqld restart
或者
進入mysql安裝根目錄
./bin/mysqladmin -u root -p shutdown
輸入密碼關閉
然後再啓動
./bin/mysqld_safe&
,實在關不掉就用kill命令吧,把mysql保護線程和mysql線程殺掉就OK了,然後再啓動
∠( ᐛ 」∠)_
。
嘗試遠程連接,OK,大功告成。