Ubuntu初始化MySQL碰到的坑


想着將MySQL初始化,改變一下存放數據文件的位置:

root@ubuntu:/lvmdata# mkdir data
root@ubuntu:/lvmdata# chown -R mysql:mysql /lvmdata/data

修改MySQL配置文件:

datadir = /lvmdata/data

然后初始化:

root@ubuntu:/lvmdata# mysqld --initialize  --user=mysql --datadir=/lvmdata/data

報錯:

mysqld: Can't create directory '/lvmdata/data/' (Errcode: 17 - File exists)

好吧,我讓你在data再建一個文件夾好了吧:

root@ubuntu:/lvmdata# mysqld --initialize  --user=mysql --datadir=/lvmdata/data/data
mysqld: Can't create directory '/lvmdata/data/data/' (Errcode: 13 - Permission denied)
2018-01-07T08:59:15.782022Z 0 [ERROR] Aborting

。。。

建好了你說已存在,沒建好你說沒權限創建,可是明明權限都給mysql用戶了啊。

查了下,是這玩意:

因為Ubuntu有個AppArmor,是一個Linux系統安全應用程序,類似於Selinux,AppArmor默認安全策略定義個別應用程序可以訪問系統資源和各自的特權,如果不設置服務的執行程序,即使你改了屬主屬組並0777權限,也是對服務起不到作用。

ok,apt安裝下MySQL默認數據目錄是/var/lib/mysql,其它的目錄權限都不可。開始修改:

# vim /etc/apparmor.d/usr.sbin.mysqld

找到:

# Allow data dir access
  /var/lib/mysql/ r,
  /var/lib/mysql/** rwk,

修改為:

# Allow data dir access
  /lvmdata/data/ r,
  /lvmdata/data/** rwk,

重啟apparmor服務:

# service apparmor restart

再初始化MySQL:

root@ubuntu:/lvmdata/data# mysqld --initialize --user=mysql --datadir=/lvmdata/data

成功:

root@ubuntu:/lvmdata/data# ls
auto.cnf        ibdata1      ib_logfile1  mysql               sys
ib_buffer_pool  ib_logfile0  ibtmp1       performance_schema

啟動服務,登錄:

root@ubuntu:/lvmdata/data# service mysql start
root@ubuntu:/lvmdata/data# mysql -uroot -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

root密碼沒了。。。

對於Mysql 5.7.6以后的5.7系列版本,Mysql使用mysqld --initialize或mysqld --initialize-insecure命令來初始化數據庫,后者可以不生成隨機密碼。但是安裝Mysql時默認使用的是前一個命令,這個命令也會生成一個隨機密碼。改密碼保存在了Mysql的日志文件中。

查找MySQL日志:

root@ubuntu:/var/log/mysql# tail /var/log/mysql/error.log 
2018-01-07T09:43:31.587130Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2018-01-07T09:43:31.697297Z 0 [ERROR] Too many arguments (first extra is 'mysqld').
2018-01-07T09:43:31.697318Z 0 [ERROR] Aborting

2018-01-07T09:44:51.131747Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2018-01-07T09:44:51.417055Z 0 [Warning] InnoDB: New log files created, LSN=45790
2018-01-07T09:44:51.518291Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2018-01-07T09:44:51.597737Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 686d9f78-f38f-11e7-a027-000c2927e6cf.
2018-01-07T09:44:51.601893Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2018-01-07T09:44:51.603154Z 1 [Note] A temporary password is generated for root@localhost: Qs0K5tiIA7-K

最后一行,密碼Qs0K5tiIA7-K,再登錄成功並要求更改密碼:

mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

更改:

mysql>  SET PASSWORD = PASSWORD('yourpwd');
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

圓滿解決!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM