将数据库从一台服务器移动到另一台服务器的最快方法

blo*_*ilk 8 mysql migration

我正在将单个 MySQL 数据库(约 10GB 未压缩)从一台服务器移动到同一网络上的另一台服务器。当前 MySQL 版本是5.1.41,新版本是5.5.24. 该数据库包含 MyISAM 和 InnoDB 表。是否可以使用这种方法:

  1. 关闭两台服务器上的 MySQL
  2. /data目录从旧服务器复制到新服务器
  3. 启动新服务器

我意识到这个基本问题之前可能已经被问过 1000 次,但我见过的大多数问题都没有提到更改版本并支持 MyISAM 和 InnoDB。

Rol*_*DBA 6

如果您要更改版本,请不要移动 mysql SCHEMA

为什么不应该移动 mysql 文件夹?它与身份验证权限有关。

mysql.user 中的列数因版本而异

如果你跑 desc mysql.user

  • 您将看到 MySQL 4.1 的 31 行
  • 您将看到 MySQL 5.0 的 37 行
  • 您将看到 MySQL 5.1 的 39 行
  • 您将看到 MySQL 5.5 的 42 行

我之前写过这个

移动其他一切都可以。在装有 MySQL 5.5.24 的新机器上,执行以下操作:

mv /var/lib/mysql /var/lib/mysql/mysql55
mkdir /var/lib/mysql
<scp or rsync /var/lib/mysql of MySQL 5.1.41 over to /var/lib.mysql of MySQL 5.5.24>
rm -f /var/lib/mysql/mysql/*
cp /var/lib/mysql/mysql55/* /var/lib/mysql/mysql/*
chown -R mysql:mysql /var/lib/mysql
service mysql start
Run Code Online (Sandbox Code Playgroud)

所以,问题仍然存在:

你如何将旧 MySQL 5.1.41 中的用户权限移动到 MySQL 5.5.24 ???

在 MySQL 5.1.41 机器上有两种方法可以做到这一点:

方法#1:使用pt-show-grants

这个 Percona Toolkit 程序移动打印出纯 SQL 中的用户权限。您可以将结果输出运行到文本文件中。然后,在 MySQL 5.5.24 中执行文本文件。故事结局。

pt-show-grants ... > MySQLUserGrants.sql
Run Code Online (Sandbox Code Playgroud)

方法#2:模拟pt-show-grants

我为 pt-show-grants 制作了自己的技术

mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -A | sed 's/$/;/g' > MySQLUserGrants.sql
Run Code Online (Sandbox Code Playgroud)

无论哪种方式,将 MySQLUserGrants.sql 移动到 MySQL 5.5.24 机器并执行脚本

我之前写过这个:将 myisam 5.0 数据库导入 5.5 innodb 服务器