——廢話先不羅嗦了,就讓這篇草草完成的部落格文章全且當做個記錄吧。
以前我使用的是centos上的mysql,後來因為測試需要,需要將**以及在資料庫儲存的資料遷移到新的系統中進行測試,目標系統為redhat enterprise linux server(rhel)。
由於以前從來沒有遷移過資料庫,因此馬上就遇到了難題。
還有其他問題沒有列出,僅僅就許可權的問題在下面的命令以及執行結果中展示。
注:部分顯示被遮蔽。
sun 25 mar 2012 05:07:30 pm cst在遷移mysql時出現的錯誤/usr/bin/mysqlshow: cannot list tables in ********: can't read dir of './********/' (errno: 13)
解決方案:mysql資料庫的子資料庫必須是mysql使用者和mysql組所有,否則mysql無法讀取遷移過來的資料庫。
[root@localhost mysql]# ls -al
total
drwxr-xr-x. 7 root root 4096 mar 24 02:44 .
drwxr-xr-x. 48 root root 4096 mar 24 02:45 ..
-rw-r-----. 1 root root 27262976 mar 24 02:44 ibdata1
-rw-r-----. 1 root root 5242880 mar 24 02:44 ib_logfile0
-rw-r-----. 1 root root 5242880 mar 24 02:44 ib_logfile1
drwx------. 2 root root 4096 mar 24 02:44 ********
drwx------. 2 root root 4096 mar 24 02:44 mysql
drwx------. 2 root root 4096 mar 24 02:44 performance_schema
drwx------. 2 root root 4096 mar 24 02:44 ********
drwx------. 2 root root 4096 mar 24 02:44 ********
[root@localhost mysql]# ls /var/lib/mysql/ -al
total
drwxr-xr-x. 5 mysql mysql 4096 mar 25 16:33 .
drwxr-xr-x. 54 root root 4096 mar 24 04:27 ..
-rw-rw----. 1 mysql mysql 10485760 mar 25 16:23 ibdata1
-rw-rw----. 1 mysql mysql 5242880 mar 25 16:23 ib_logfile0
-rw-rw----. 1 mysql mysql 5242880 mar 25 16:23 ib_logfile1
drwx------. 2 root root 4096 mar 25 16:33 ********
drwx------. 2 mysql mysql 4096 mar 25 16:23 mysql
srwxrwxrwx. 1 mysql mysql 0 mar 25 16:23 mysql.sock
drwx------. 2 root root 4096 mar 25 16:33 ********
[root@localhost mysql]# chown -r mysql:mysql ./********/
[root@localhost mysql]# chown -r mysql:mysql ./********/
[root@localhost mysql]# service mysqld restart
stopping mysqld: [ ok ]
starting mysqld: [ ok ]
[root@localhost mysql]# ls -al
total
drwxr-xr-x. 7 root root 4096 mar 24 02:44 .
drwxr-xr-x. 48 root root 4096 mar 24 02:45 ..
-rw-r-----. 1 root root 27262976 mar 24 02:44 ibdata1
-rw-r-----. 1 root root 5242880 mar 24 02:44 ib_logfile0
-rw-r-----. 1 root root 5242880 mar 24 02:44 ib_logfile1
drwx------. 2 mysql mysql 4096 mar 24 02:44 ********
drwx------. 2 root root 4096 mar 24 02:44 mysql
drwx------. 2 root root 4096 mar 24 02:44 performance_schema
drwx------. 2 root root 4096 mar 24 02:44 ********
drwx------. 2 mysql mysql 4096 mar 24 02:44 ********
[root@localhost mysql]# cd /var/lib/mysql/
[root@localhost mysql]# ls -al
total
drwxr-xr-x. 5 mysql mysql 4096 mar 25 17:12 .
drwxr-xr-x. 54 root root 4096 mar 24 04:27 ..
-rw-rw----. 1 mysql mysql 10485760 mar 25 17:11 ibdata1
-rw-rw----. 1 mysql mysql 5242880 mar 25 17:12 ib_logfile0
-rw-rw----. 1 mysql mysql 5242880 mar 25 16:23 ib_logfile1
drwx------. 2 root root 4096 mar 25 16:33 ********
drwx------. 2 mysql mysql 4096 mar 25 16:23 mysql
srwxrwxrwx. 1 mysql mysql 0 mar 25 17:12 mysql.sock
drwx------. 2 root root 4096 mar 25 16:33 ********
[root@localhost mysql]# chown -r mysql:mysql ./********/
[root@localhost mysql]# chown -r mysql:mysql ./********/
[root@localhost mysql]# ls -al
total
drwxr-xr-x. 5 mysql mysql 4096 mar 25 17:12 .
drwxr-xr-x. 54 root root 4096 mar 24 04:27 ..
-rw-rw----. 1 mysql mysql 10485760 mar 25 17:11 ibdata1
-rw-rw----. 1 mysql mysql 5242880 mar 25 17:12 ib_logfile0
-rw-rw----. 1 mysql mysql 5242880 mar 25 16:23 ib_logfile1
drwx------. 2 mysql mysql 4096 mar 25 16:33 ********
drwx------. 2 mysql mysql 4096 mar 25 16:23 mysql
srwxrwxrwx. 1 mysql mysql 0 mar 25 17:12 mysql.sock
drwx------. 2 mysql mysql 4096 mar 25 16:33 ********
[root@localhost mysql]# service mysqld restart
stopping mysqld: [ ok ]
starting mysqld: [ ok ]
[root@localhost mysql]#
其實說的白了,就是需要注意許可權指派。因為mysql的資料庫必須由mysql建立和擁有。因為一般來說,遷移過來的都是只具有root的許可權——664。所以只有使用chown命令了。
附錄:chown的用法:
chown -r 使用者名稱:使用者組 目標檔案或目錄
其中r表示遞迴執行。
MySQL資料庫遷移注意點
原始出處 作者資訊和本宣告。否則將追究法律責任。廢話先不羅嗦了,就讓這篇草草完成的部落格文章全且當做個記錄吧。以前我使用的是centos上的mysql,後來因為測試需要,需要將 以及在資料庫儲存的資料遷移到新的系統中進行測試,目標系統為redhat enterprise linux server r...
資料遷移注意點
注意點如下 1.程式邏輯部分,新邏輯上線,注意對老邏輯的相容,千萬不要不管三七二十一暴力替換。2.資料庫部分 1 能建新表盡量建新表以避免對老資料的破壞。2 如果老表有欄位增加,千萬不要做非空,唯一性的約束,否則後果自負。3 假如需要減欄位,那麼請考慮臨時替代的方案,比如新建一張臨時表,讓程式先取臨...
CodeFirst遷移注意點
context建構函式 不檢查 migrationhistory 取消當資料庫模型發生改變時刪除當前資料庫重建新資料庫的設定。database.setinitializer null 重新建立資料庫 database.setinitializer new dropcreatedatabaseifmo...