Linux下整體遷移MySQL數據庫文档目錄

字號+ 編輯: 种花家 修訂: H波 來源: CSDN博客 2023-09-11 我要說兩句(0)

那時候還年輕,沒想到數據庫還要往數據盤裡面塞,隨便塞進系統盤裡了事,沒想到今天需要解決這個問題了。搜了搜,網上確實有一些相關聯的話題, 但是忽略了一些細節, 這篇文章站長認爲最棒, 並整理了一些細節推薦給大家。

注:rpm安裝mysql,默認的mysql的主目錄是【/var/lib/mysql/】,也就是mysql主要的數據文档的存放目錄 
現在需要把這些文档放到數據盤。假設數據盤掛載到了/data裡, 數據都在/data/mysql, 那麽,遷移步驟如下:

1:遷移工作

1.1:停止mysql服務

service mysql stop

1.2:複制數據庫到數據盤

我的數據盤目錄是/data

>cd /data 
>mkdir mysql 
>cd mysql 
>cp -r /var/lib/mysql/* ./

1.3:把新建的目錄改爲mysql的用戶組

不是表面上看到所有者是mysql就可以略過這一步的, 這一步無論如何都必須要執行!

chown -R mysql:mysql /data/mysql/

1.4:配置/etc/my.cnf

datadir = /data/mysql
# 如果你有以下兩行類似配置, 你也需要修改目錄!
innodb_data_home_dir = /data/mysql
innodb_log_group_home_dir = /data/mysql

1.5:啓動mysql服務

>service mysql start

2:常見問題Q&A

2.1 首先遷移完的目標目錄的權限問題。

ERROR! The server quit without updating PID file 1

這個是權限問題,mysql沒有這個目錄下的權限 
因爲剛複制過來的mysql文档的擁有者是root,所以要改變該目錄的擁有者,執行下面命令來改變 

chown -R mysql:mysql /data/mysql/

2.2 用mysql客戶耑連接不上服務器

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'1

其實是你的mysql的配置文档沒有配置正確。 
mysql啓動如果沒有讀到

[client]
socket = /data/mysql/mysql.sock
port = 3306
host = localhost

這些配置,則mysql會默認找 /var/lib/mysql/mysql.sock文档, 
如果要解決這個問題就需要把上面的東西加入到你的/etc/my.cnf配置文档中。

下面普及下mysql的有關配置文档的知識,以前我也是迷迷糊糊,現在搞清楚了一些。 
用 service mysql start 命令啓動mysql,mysql會默認找/etc/my.cnf 配置文档,如果沒有找到,則會按照默認的啓動目錄來啓動mysql 
就是【/var/lib/mysql】 
會在此目錄下生成 10-4-19-161.pid 類似的pid文档 和 sock文档【mysql.sock】 
但是如果你建立的了my.cnf 文档則mysql會按照你的配置文档來啓動mysql。

2.3 用戶密碼過期問題

Your password has expired. To log in you must change it using a client that supports expired passwords1

則需要修改 mysql的用戶表 
剛開始以爲修改用戶密碼就可以解決密碼過期的問題,其實不是的。需要修改msyql.user表的 password_expired值 
Y表示已經過期,需要修改成N。 
首先在本機進入mysql

>mysql -uroot -pxxxxx
>use mysql>select host,user,password_expired from user;
+-------------+----------+------------------+| host        | user     | password_expired |
+-------------+----------+------------------+| localhost   | root     | Y                |
| 10-4-19-161 | root     | Y                |
| 127.0.0.1   | root     | Y                |
| localhost   | data     | N                || 127.0.0.1   | shangbao | N                |
+-------------+----------+------------------+

如果有些是Y,則需要吧哪些是Y的改爲N。 

update set user.password_expired = ‘N’ where user.user = ‘root’;

root是你密碼過期的用戶

然後刷新權限

>flush privileges;

因爲mysql的權限是啓動的時候緩存起來的,如果修改的用戶的權限,需要手動刷新用戶權限才會生效

閲完此文,您的感想如何?
  • 有用

    4

  • 沒用

    1

  • 開心

    1

  • 憤怒

    2

  • 可憐

    1

1.如文章侵犯了您的版權,請發郵件通知本站,該文章將在24小時内刪除;
2.本站標注原創的文章,轉發時煩請注明來源;
3.交流群: 2702237 13835667

相關課文
  • [InnoDB] Failed to set NUMA memory policy of buffer pool page frames

  • 讓Mysql查詢後直接返回json字符串的方法

  • postgresql的pg_dump備份簡單方法

  • 使用sql語句在MySQL庫中去掉字段左邊、右邊指定字符串

我要說說
網上賓友點評