我需要备份一些数据库并将其迁移到新服务器。
我会使用 mysqldump ,但问题是我在启动 mysqld/mysql 时遇到了问题(这也是我迁移的原因之一)。我不断收到
# /etc/init.d/mysqld start
MySQL Daemon failed to start.
Starting mysqld: [FAILED]
基本上,我在 media temple dv 服务器上,我使用 yum 来尝试升级东西,但这搞乱了一堆配置,因为 mediatemple 最初并没有使用 yum 来安装 mysql、php 等……
无论如何,值得庆幸的是,我的旧桌子似乎还在(我可以在 中看到它们/var/lib/mysql
)
我的问题是:我能否以某种方式将我的文件迁移/var/lib/mysql
到新服务器?我想我可以将它们“复制并粘贴”到新服务器的/var/lib/mysql
目录中...理论上可行吗?
或者我还有其他选择来移动桌子吗?
我在 CentOS 上。
答案1
如果您的每个表都使用 MyISAM 存储引擎,那么复制 /var/lib/mysql 就可以了。
如果即使一个表是 InnoDB,那么您必须确保复制以下内容:
- /var/lib/mysql
- ibdata、ib_logfile0、ib_logfile1(如果它们不在 /var/lib/mysql 中)
- /etc/my.cnf(因为 InnoDB 设置)
请确保当您在另一台机器上恢复 /var/lib/mysql 时,在新服务器上使用相同的 MySQL 主要版本是最安全的。
如果您从 5.1 升级到 5.5,则复制 /var/lib/mysql 对于授权表来说是不可能的,因为 /var/lib/mysql/mysql/user.frm 具有不同的列布局数量版本。
- MySQL 5.0 有 37 列
- MySQL 5.1 有 39 列
- MySQL 5.5 有 42 列
答案2
复制 /var/lib/mysql 的内容并不是一个完美的解决方案,但如果两个 MySQL 版本彼此二进制兼容,那么它就可以起作用。
这意味着实际上 MySQL 3 文件无法与 MySQL 5.5 服务器兼容。但通常当源是 MySQL 5.x 并且目标也是 5.x 时,它应该可以工作。
不过,我不知道当源是 32 位而目标是 64 位时是否会存在问题。