Ubuntu

將 MySQL 數據移動到另一個目錄

  • July 17, 2014

我正在嘗試將 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/mysqlor之類的路徑/data/mysql,但上述最小場景足以重現該問題。)

您遇到了 AppArmor 規則,該規則禁止 MySQL 打開您放置它們的文件。如果你檢查你的系統日誌文件,你會發現一個神秘的錯誤資訊。

解決方案包括:

  1. 禁用 AppArmor(不推薦)
  2. 編輯 AppArmor 規則(複雜)
  3. 使用 mount bind 讓 MySQL 認為您的數據文件位於原始位置,而它們實際上位於 EBS 卷上。將您的更改還原為datadir.

幾年前,我為亞馬遜寫了一篇文章,描述了您正在嘗試做的事情的社區最佳實踐,包括掛載綁定範例:

使用 EBS 在 Amazon EC2 上執行 MySQL

http://ec2ebs-mysql.notlong.com

請注意,文章中的 AMI id 是舊的。使用現代 Ubuntu AMI,您需要在 mkfs.xfs 和 /etc/fstab 中將 /dev/sdh 替換為 /dev/xvdh(但不是在 ec2 工具命令行中)。

引用自:https://serverfault.com/questions/314269