Ubuntu
將 MySQL 數據移動到另一個目錄
我正在嘗試將 MySQL 安裝的數據文件移動到另一個地方,但它不起作用。
當試圖啟動 mysqld 時,我得到了這個
/var/log/mysql/error.log
:110922 7:27:40 [Note] Plugin 'FEDERATED' is disabled. /usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13) 110922 7:27:40 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it. 110922 7:27:40 InnoDB: Initializing buffer pool, size = 512.0M 110922 7:27:40 InnoDB: Completed initialization of buffer pool 110922 7:27:40 InnoDB: Operating system error number 13 in a file operation. InnoDB: The error means mysqld does not have the access rights to InnoDB: the directory. InnoDB: File name ./ibdata1 InnoDB: File operation call: 'open'. InnoDB: Cannot continue operation.
即使我嘗試一些無辜的事情,也會發生上述情況:
sudo cp -a /var/lib/mysql /var/lib/mysql2
…並將
datadir
設置更改/etc/mysql/my.cnf
為/var/lib/mysql2
(如果我保持
my.cnf
原樣,我會得到相同的結果,並創建一個名為 mysql2 的符號連結以指向 mysql。)這有點令人困惑。複製的 datadir 中的文件權限完全相同。顯然我在做這些改變之前停止/啟動守護程序(
sudo service mysql stop
等等)知道我做錯了什麼嗎?這是 Amazon EC2 上的 Ubuntu 11.04(64 位 m1.large 實例)。
(實際上,我想將 MySQL 數據移動到另一個 EBS 卷,移動到諸如
/mnt/data/mysql
or之類的路徑/data/mysql
,但上述最小場景足以重現該問題。)
您遇到了 AppArmor 規則,該規則禁止 MySQL 打開您放置它們的文件。如果你檢查你的系統日誌文件,你會發現一個神秘的錯誤資訊。
解決方案包括:
- 禁用 AppArmor(不推薦)
- 編輯 AppArmor 規則(複雜)
- 使用 mount bind 讓 MySQL 認為您的數據文件位於原始位置,而它們實際上位於 EBS 卷上。將您的更改還原為
datadir
.幾年前,我為亞馬遜寫了一篇文章,描述了您正在嘗試做的事情的社區最佳實踐,包括掛載綁定範例:
使用 EBS 在 Amazon EC2 上執行 MySQL
請注意,文章中的 AMI id 是舊的。使用現代 Ubuntu AMI,您需要在 mkfs.xfs 和 /etc/fstab 中將 /dev/sdh 替換為 /dev/xvdh(但不是在 ec2 工具命令行中)。