聽說你要在 Ubuntu 上安裝 MySQL ?踩坑了吧。

Uptutu發表於2020-06-17

1、安裝

$ sudo apt-get install mysql-server
​
$ sudo apt-get install mysql-client
​
$ sudo apt-get install libmysqlclient-dev

以此在終端輸入上述程式碼,等待安裝。裝好後,輸入以下程式碼檢查下是否安裝成功。

$ sudo netstat -tap | grep mysql
​
$ netstat -tap | grep mysql
​
tcp6     0       0     [::]:mysql    [::]:*    LISTEN  7510/mysqld12345

如果出現第三行提示,則表明安裝成功。

2、登入MySQL

$ mysql -u root -p

輸入密碼,如果可以進入則下面的不用看了;如果提示不能登入,則我們嘗試啟用安全模式登入MySQL,這樣可以繞過密碼登入,登入後再修改密碼。

3、安全模式登入MySQL

$ sudo /etc/init.d/mysql stop
​
-------------------------------------
[sudo] wl 的密碼:
[ ok ] Stopping mysql (via systemctl): mysql.service.
​
$ sudo /usr/bin/mysqld_safe --skip-grant-tables --skip-networking 

輸入第一行終止MySQL執行,成功,會提示下面兩行;輸入第四行,成功,沒有任何報錯則可以另外開啟一個終端視窗進行下一步操作;但是一般會報錯,比如提示mysqld_safe Directory ‘/var/run/mysqld’ for UNIX socket file don’t exists

因此我們嘗試輸入以下程式碼

$ sudo mkdir -p /var/run/mysqld
​
$ sudo chown mysql:mysql /var/run/mysqld

最後再次輸入:


sudo /usr/bin/mysqld_safe --skip-grant-tables --skip-networking 

到了這裡不在提示錯誤,可以開啟另一個終端埠了,嘗試無密碼登入MySQL。

mysql -u root

到這裡應該可以進入MySQL了,繼續操作

> use mysql;> update user set authentication_string=PASSWORD("這裡輸入你要改的密碼") where User='root'; #更改密碼
> update user set plugin="mysql_native_password"; #如果沒這一行可能也會報一個錯誤,因此需要執行這一行
​
> flush privileges; #更新所有操作許可權
> quit;

4、使用修改的密碼登入MySQL

經過上面一系列的操作,應該可以正常使用你更改的密碼登入了。

$ sudo /etc/init.d/mysql stop
$ sudo /etc/init.d/mysql start # reset mysql
​
$ mysql -u root -p

第一行先終止資料庫執行,第二行重啟資料庫服務,第三行root使用者登入。

第一步:

在使apt-get install mysqlserver 預設安裝 mysql 的情況下需要修改

$ vim /etc/mysql/my.cnf

找到 bind-address = 127.0.0.1

(或者檔案在 /etc/mysql/mysql.conf.d/mysqld.cnf )

註釋掉這行,如:#bind-address = 127.0.0.1

或者改為: bind-address = 0.0.0.0

允許任意IP訪問;

或者自己指定一個IP地址。

重啟 MySQL:

$ sudo service mysql restart

第二步:

授權使用者能進行遠端連線

> grant all privileges on *.* to root@"%" identified by "password" with grant option;> flush privileges;

第一行命令解釋如下,.:第一個代表資料庫名;第二個代表表名。這裡的意思是所有資料庫裡的所有表都授權給使用者。root:授予root賬號。“%”:表示授權的使用者IP可以指定,這裡代表任意的IP地址都能訪問MySQL資料庫。“password”:分配賬號對應的密碼,這裡密碼自己替換成你的mysql root帳號密碼。

第二行命令是重新整理許可權資訊,也即是讓我們所作的設定馬上生效。

在使用 MySQL 時當建表語句中有以下語句時(該問題是我在使用 GORM 時遇到的):

> create_time DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00'

則會出現以下的異常:

Invalid default value for ‘create_time’

這是由於 SQL_MODE 的問題沒設定好,方案如下:

方案一:

查詢當前資料庫的 SQL_MODE

輸入:

select @@sql_mode

得到以下結果:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

可以看到 NO_ZERO_IN_DATE,NO_ZERO_DATE 是 DATE 不能全部為 0 的原因.
所以把模式中的 NO_ZERO_IN_DATE,NO_ZERO_DATE 去掉就可
SET [SESSION|GLOBAL] sql_mode=’modes’下:

SET GLOBAL sql_mode=’ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’

其中:SESSION只在當前會話中生效,GLOBAL為全域性生效。

方案二:

改 mysql 模式

修改my.cnf檔案,在 [mysqld] 中新增

sql-mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

重啟mysql

方案三:

把語句改為以下就可以執行建立表

create_time DATETIME NOT NULL DEFAULT '0000-01-01 00:00:00';

如果在配置過程中遇到問題可以使用下面的命令檢視錯誤

$ tail -30 /var/log/mysql/error.log
​
$ ps aux |grep mysql*
​
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章