Ubuntu 安裝 mysql 並修改數據庫目錄


.

.

.

.

.

今天折騰了一下午的時間,恢復了無數次虛擬機快照,終於在 Ubuntu 上把 mysql 安裝好了。

mysql 是從官網下載的:mysql-server_5.7.16-1ubuntu12.04_i386.deb-bundle.tar

系統是 32 位 Ubuntu 12.04 LTS。

首先把下載好的 mysql-server_5.7.16-1ubuntu12.04_i386.deb-bundle.tar 放到虛擬機的 ~/tmp 目錄下,然后進入該目錄開始安裝。

user@user-virtual-machine:~$ mkdir tmp
user@user-virtual-machine:~$ cd tmp/
user@user-virtual-machine:~/tmp$ sudo apt-get install libaio1
[sudo] password for user: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  libaio1
# ... 此處省略n行... 
user@user-virtual-machine:~/tmp$ tar xf mysql-server_5.7.16-1ubuntu12.04_i386.deb-bundle.tar
user@user-virtual-machine:~/tmp$ sudo dpkg -i mysql-common_5.7.16-1ubuntu12.04_i386.deb
# ... 此處省略n行... 
user@user-virtual-machine:~/tmp$ sudo dpkg -i libmysqlclient20_5.7.16-1ubuntu12.04_i386.deb
# ... 此處省略n行... 
user@user-virtual-machine:~/tmp$ sudo dpkg -i libmysqlclient-dev_5.7.16-1ubuntu12.04_i386.deb
# ... 此處省略n行... 
user@user-virtual-machine:~/tmp$ sudo dpkg -i libmysqld-dev_5.7.16-1ubuntu12.04_i386.deb
# ... 此處省略n行... 
user@user-virtual-machine:~/tmp$ sudo dpkg -i mysql-community-client_5.7.16-1ubuntu12.04_i386.deb
# ... 此處省略n行... 
user@user-virtual-machine:~/tmp$ sudo dpkg -i mysql-client_5.7.16-1ubuntu12.04_i386.deb
# ... 此處省略n行... 
user@user-virtual-machine:~/tmp$ sudo dpkg -i mysql-community-server_5.7.16-1ubuntu12.04_i386.deb
# ... 此處省略n行... 
update-alternatives: using /etc/mysql/mysql.cnf to provide /etc/mysql/my.cnf (my.cnf) in auto mode.
..
 * MySQL Community Server 5.7.16 is started
Processing triggers for ureadahead ...
ureadahead will be reprofiled on next reboot
Processing triggers for man-db ...
user@user-virtual-machine:~/tmp$

解釋下上面的操作:

我們要先安裝 libaio1 這個庫,不然如果先安裝了 mysql ,一會兒報缺少這個庫的時候,再回頭來安裝這個包就會裝不上,不知道為啥,LZ 閃回了無數次虛擬機快照才摸清這個套路。= =||

然后把 mysql 的安裝包 mysql-server_5.7.16-1ubuntu12.04_i386.deb-bundle.tar 解壓縮出來,會釋放出好幾個文件,一定要按照上面的順序安裝!!!這個也是 LZ 分析了好久的錯誤信息才摸清的套路。。

當然也可以寫成一條語句,如果你不怕期間執行出錯的話:

sudo dpkg -i mysql-common_5.7.16-1ubuntu12.04_i386.deb libmysqlclient20_5.7.16-1ubuntu12.04_i386.deb libmysqlclient-dev_5.7.16-1ubuntu12.04_i386.deb libmysqld-dev_5.7.16-1ubuntu12.04_i386.deb mysql-community-client_5.7.16-1ubuntu12.04_i386.deb mysql-client_5.7.16-1ubuntu12.04_i386.deb mysql-community-server_5.7.16-1ubuntu12.04_i386.deb

注意:在安裝最后一個包的時候,也就是 mysql-community-server_5.7.16-1ubuntu12.04_i386.deb 這個包的時候,會提示設置 mysql 數據庫的 root 密碼。

確認密碼之后,直到我們看到這句出現了,就說明安裝好了,並且 mysql 服務也已經幫我們啟動好了。

 * MySQL Community Server 5.7.16 is started

這時候如果想要驗證一下可以使用如下命令進行簡單測試:

user@user-virtual-machine:~/tmp$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.16 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

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

mysql> exit
Bye
user@user-virtual-machine:~/tmp$

-u 參數后面跟的是登錄數據庫的用戶名;

-p 表示使用密碼登錄。

登陸之后,使用 show databases; 就可以看到現有的數據庫了。

 

----------------------------------------就這么結束了豈不是太沒勁----------------------------------------

下面 LZ 開始了新的作死之旅,修改數據庫路徑。

默認情況下,數據庫保存在 /var/lib/mysql 目錄下。由於一般情況下 LZ 會單獨給 /home 一個分區,但並不會給 /var 一個分區,所以為了安全起見,LZ 決定把數據庫搬到 /home/mysqldata 目錄中。

注意哦,單純的 mv 可不行,必須進行一些配置才能讓 mysql 知道自己數據的新家在哪。

user@user-virtual-machine:~/tmp$ sudo service mysql stop
...
 * MySQL Community Server 5.7.16 is stopped
user@user-virtual-machine:~/tmp$ cd /home/
user@user-virtual-machine:/home$ sudo cp -arp /var/lib/mysql .
user@user-virtual-machine:/home$ sudo mv mysql mysqldata
user@user-virtual-machine:/home$ ll
total 16
drwxr-xr-x  4 root  root  4096 Nov 21 21:25 ./
drwxr-xr-x 23 root  root  4096 Nov 21 17:10 ../
drwxr-x---  5 mysql mysql 4096 Nov 21 21:25 mysqldata/
drwxr-xr-x 22 user  user  4096 Nov 21 21:25 user/
user@user-virtual-machine:/home$ 

首先把 mysql 服務停下來,然后把它的數據拷貝的目的地,也就是把 /var/lib/mysql 拷貝到 /home/mysqldata。

注意 cp 命令的參數,-arp 是遞歸復制並且保留權限

一定要復制完畢之后再改名:mv mysql mysqldata,不然直接復制的話權限可能會出問題,像這樣:cp /var/lib/mysql ./mysqldata。當然這一步不改名字也是可以的,LZ 就是不想用 mysql 這個名字嘛。

接下來進行配置:

user@user-virtual-machine:/home$ sudo vim /etc/init.d/mysql 

編輯 /etc/init.d/mysql 腳本,搜索 datadir 之類的關鍵字,修改成類似如下的樣子:

# MYSQLDATA=$(get_mysql_option mysqld datadir "/var/lib/mysql")
MYSQLDATA=$(get_mysql_option mysqld datadir "/home/mysqldata")

第一行是被注釋掉了,LZ 沒有刪掉它,第二行是修改之后的樣子。

這個文件在不同版本上可能會不一樣,因為 LZ 在 baidu 上查的都不是這種寫法,所以各位在修改的時候也要看情況適當修改。

接下來修改另一個腳本:

user@user-virtual-machine:/home$ sudo vim -p /etc/mysql/my.cnf /etc/mysql/mysql.conf.d/mysqld.cnf 
2 files to edit

LZ 這次一下打開了兩個文件,目的就是為了把 /etc/mysql/mysql.conf.d/mysqld.cnf 文件里的內容抄一份到 /etc/mysql/my.cnf 文件中。

實際生效的當然是 /etc/mysql/my.cnf 文件啦,這里有一點需要注意:系統中可能會存在多個 my.cnf,后讀取的會覆蓋先讀取的配置,如果想知道你的系統是按照什么順序讀取的,可以用下面這種方式查看,免得改完之后找不到不生效的原因:

user@user-virtual-machine:/home$ mysql --help | grep my.cnf
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf 
user@user-virtual-machine:/home$ 

可以看出來,LZ 這里的優先級是 /etc/my.cnf < /etc/mysql/my.cnf < ~/.my.cnf。當然,實際情況是 LZ 的系統里只有 /etc/mysql/my.cnf 這一個文件,另外兩個都沒有創建,所以 LZ 當然是理所當然的修改這個文件啦。

修改前:

# ... 上面省略 n 行注釋 ...
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

修改后:

#... 上面省略 n 行注釋 ...

# !includedir /etc/mysql/conf.d/
# !includedir /etc/mysql/mysql.conf.d/

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /home/mysqldata
log-error       = /var/log/mysql/error.log
# By default we only accept connections from localhost
bind-address    = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

之前 LZ 在網上查的帖子說還要把 socket 文件修改成 /home/mysqldata/mysql/mysql.sock,經過實驗,千萬別改這個路徑,不然以后你每次使用 mysql 客戶端的時候命令就得變成這個樣子才能正常連接數據庫:

user@user-virtual-machine:/home$ mysql -u root -p -S /home/mysqldata/mysql/mysql.sock
user@user-virtual-machine:/home$ 

其實只需要把 /etc/mysql/mysql.conf.d/mysqld.cnf 文件里的內容拷貝過來,然后修改一下 datadir 字段就行了。

 

----------------------------------------你以為這就完事了?太天真了,騷年----------------------------------------

LZ 高興的執行了 sudo service mysql start,然而..........根本無法啟動好嘛!!

莫非是權限不對?莫非是某個配置文件沒有改干凈?

LZ 嘗試了無數次 chown -R mysql:mysql mysqldata 和 sudo service mysql stop/start,然而並沒有什么卵用。

后來在茫茫網絡中發現了一根救命稻草(文末有連接),原來是安全機制搞得鬼。

接着改:

user@user-virtual-machine:/home$ sudo vim /etc/apparmor.d/usr.sbin.mysqld 

果然在這個文件里找到了修改之前的 mysql 數據庫路徑:/var/lib/mysql。

改成這個樣子:

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

照葫蘆畫瓢,把原來的路徑給注釋掉,把新的路徑給配置上。

重啟 apparmor 服務:

user@user-virtual-machine:/home$ sudo service apparmor restart
 * Reloading AppArmor profiles
Skipping profile in /etc/apparmor.d/disable: usr.bin.firefox
Skipping profile in /etc/apparmor.d/disable: usr.sbin.rsyslogd  [ OK ]
user@user-virtual-machine:/home$

好了,接下來終於可以啟動 mysql 服務了:

user@user-virtual-machine:/home$ sudo service mysql start
..
 * MySQL Community Server 5.7.16 is started
user@user-virtual-machine:/home$

哇咔咔咔,啟動成功啦,趕緊試試吧。

user@user-virtual-machine:/home$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.16 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

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

mysql> create database live;
Query OK, 1 row affected (0.00 sec)

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

mysql> exit
Bye
user@user-virtual-machine:/home$ sudo ls mysqldata/
auto.cnf    ca.pem         client-key.pem  ibdata1      ib_logfile1  live   mysqld_safe.pid      private_key.pem  server-cert.pem  sys
ca-key.pem  client-cert.pem  ib_buffer_pool  ib_logfile0  ibtmp1       mysql  performance_schema  public_key.pem   server-key.pem
user@user-virtual-machine:/home$ 

上面 LZ 創建了一個叫做 live 的新庫,並且可以看到,在 /home/mysqldata 目錄下已經有 live 這個目錄了,說明新庫遷移成功!

最后一步我們就可以放心的把舊庫給刪除了。(你是不是把它給忘了?)

user@user-virtual-machine:/home$ sudo rm -rf /var/lib/mysql
user@user-virtual-machine:/home$ 

 

參考資料:

mysql提示[Warning] Cant create test file xxx lower-test

 


免責聲明!

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



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