将 MySQL 迁移到新服务器

Ale*_*der 5 mysql windows migration mysql-5.5 mysql-5.1

我们有一个在 Windows Server 2008 R2 x64(服务器 A)上运行的 MySQL 5.1 实例复制到 Windows Server 2003 R2(服务器 B)上的另一个 MySQL 5.1 实例。

我们在另一台 Windows Server 2008 R2 x64 机器(服务器 C)上有一个新的 MySQL 5.5 实例。

我想用服务器 C 替换服务器 A。

我的计划是通过像这样“克隆”服务器 B 将服务器 C 设置为服务器 A 的另一个从站:

http://www.redips.net/mysql/add-new-slave/

之后我打算这样做:

http://blesseddlo.wordpress.com/2011/06/03/convert-mysql-slave-to-master/

之后我想将服务器 B 的主服务器更改为服务器 C。

这是一种可行的方法吗?有注意事项吗?将 MySQL 5.5 实例设置为 MySQL 5.1 实例的从属时,是否存在兼容性问题?

我不能只是停止一切并使用,mysqldump因为不会有停机时间,而且我们有大约 25 GB 的数据必须通过千兆 LAN 传输。

Rol*_*DBA 0

我担心的第一个兼容性问题是模式表的布局mysql

mysql.user这是MySQL 5.1 中的布局

+-----------------------+-----------------------------------+------+-----+---------+-------+
| Field                 | Type                              | Null | Key | Default | Extra |
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Host                  | char(60)                          | NO   | PRI |         |       |
| User                  | char(16)                          | NO   | PRI |         |       |
| Password              | char(41)                          | NO   |     |         |       |
| Select_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Insert_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Update_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Delete_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Create_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Drop_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Reload_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Shutdown_priv         | enum('N','Y')                     | NO   |     | N       |       |
| Process_priv          | enum('N','Y')                     | NO   |     | N       |       |
| File_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Grant_priv            | enum('N','Y')                     | NO   |     | N       |       |
| References_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Index_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Alter_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Show_db_priv          | enum('N','Y')                     | NO   |     | N       |       |
| Super_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Create_tmp_table_priv | enum('N','Y')                     | NO   |     | N       |       |
| Lock_tables_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Execute_priv          | enum('N','Y')                     | NO   |     | N       |       |
| Repl_slave_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Repl_client_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Create_view_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Show_view_priv        | enum('N','Y')                     | NO   |     | N       |       |
| Create_routine_priv   | enum('N','Y')                     | NO   |     | N       |       |
| Alter_routine_priv    | enum('N','Y')                     | NO   |     | N       |       |
| Create_user_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Event_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Trigger_priv          | enum('N','Y')                     | NO   |     | N       |       |
| ssl_type              | enum('','ANY','X509','SPECIFIED') | NO   |     |         |       |
| ssl_cipher            | blob                              | NO   |     | NULL    |       |
| x509_issuer           | blob                              | NO   |     | NULL    |       |
| x509_subject          | blob                              | NO   |     | NULL    |       |
| max_questions         | int(11) unsigned                  | NO   |     | 0       |       |
| max_updates           | int(11) unsigned                  | NO   |     | 0       |       |
| max_connections       | int(11) unsigned                  | NO   |     | 0       |       |
| max_user_connections  | int(11) unsigned                  | NO   |     | 0       |       |
+-----------------------+-----------------------------------+------+-----+---------+-------+
39 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

mysql.user这是MySQL 5.5 中的布局

+------------------------+-----------------------------------+------+-----+---------+-------+
| Field                  | Type                              | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+---------+-------+
| Host                   | char(60)                          | NO   | PRI |         |       |
| User                   | char(16)                          | NO   | PRI |         |       |
| Password               | char(41)                          | NO   |     |         |       |
| Select_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Insert_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Update_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Delete_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Create_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Drop_priv              | enum('N','Y')                     | NO   |     | N       |       |
| Reload_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Shutdown_priv          | enum('N','Y')                     | NO   |     | N       |       |
| Process_priv           | enum('N','Y')                     | NO   |     | N       |       |
| File_priv              | enum('N','Y')                     | NO   |     | N       |       |
| Grant_priv             | enum('N','Y')                     | NO   |     | N       |       |
| References_priv        | enum('N','Y')                     | NO   |     | N       |       |
| Index_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Alter_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Show_db_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Super_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Create_tmp_table_priv  | enum('N','Y')                     | NO   |     | N       |       |
| Lock_tables_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Execute_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Repl_slave_priv        | enum('N','Y')                     | NO   |     | N       |       |
| Repl_client_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Create_view_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Show_view_priv         | enum('N','Y')                     | NO   |     | N       |       |
| Create_routine_priv    | enum('N','Y')                     | NO   |     | N       |       |
| Alter_routine_priv     | enum('N','Y')                     | NO   |     | N       |       |
| Create_user_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Event_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Trigger_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Create_tablespace_priv | enum('N','Y')                     | NO   |     | N       |       |
| ssl_type               | enum('','ANY','X509','SPECIFIED') | NO   |     |         |       |
| ssl_cipher             | blob                              | NO   |     | NULL    |       |
| x509_issuer            | blob                              | NO   |     | NULL    |       |
| x509_subject           | blob                              | NO   |     | NULL    |       |
| max_questions          | int(11) unsigned                  | NO   |     | 0       |       |
| max_updates            | int(11) unsigned                  | NO   |     | 0       |       |
| max_connections        | int(11) unsigned                  | NO   |     | 0       |       |
| max_user_connections   | int(11) unsigned                  | NO   |     | 0       |       |
| plugin                 | char(60)                          | NO   |     |         |       |
| authentication_string  | text                              | NO   |     | NULL    |       |
+------------------------+-----------------------------------+------+-----+---------+-------+
42 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

如果您从 MySQL 5.1 进行 mysqldump,请排除该mysql架构。

如何通过 MySQL Grants 进行移植?像这样:

C:\> set MYSQL_CONN=-uroot -prootpassword
C:\> set GETUSER=GETUSER.sql
C:\> set MAKEGRANTS=MAKEGRANTS.sql
C:\> mysql %MYSQL_CONN% -ANe"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" > %GETUSER%
C:\> mysql %MYSQL_CONN% -AN < %GETUSER% > %MAKEGRANTS%
Run Code Online (Sandbox Code Playgroud)

输出文件将包含用于恢复授权的 SQL。该文件有一个小问题:每一行都需要一个终止分号 ( ;)。在记事本中打开输出文件 MAKEGRANTS 并在每一行附加一个分号。

将MAKEGRANTS文件移至MySQL 5.5服务器并执行。然后,加载 mysqldump。

有些人可能会反对这种复杂的方法,并说在 MySQL 5.5 上运行mysql_upgrade.exe,特别是如果您加载包含 mysql 模式的 5.1 mysqldump。嘿嘿,这也行。我之前提到的只是我个人的偏好(我的做事方式),因为我喜欢保持 MySQL 5.5 模式表完好无损。

这里有一些有趣的事情:如果所有数据都是 InnoDB 怎么办?您可以在不停机的情况下进行 mysqldump(如下所示):

echo "STOP SLAVE;" > MySQLData.sql
mysqldump -uroot -p --single-transaction --master-data=1 --routines --triggers --databases db1 db2 >> MySQLData.sql
echo "START SLAVE;" >> MySQLData.sql
Run Code Online (Sandbox Code Playgroud)

将此文件移至 MySQL 5.5。机器。在加载 MySQL 5.5 之前,请设置复制但不要运行START SLAVE;. 加载脚本,它将停止从站,加载数据,然后启动从站。