如何在 Ubuntu 14.04 上将 MySQL 数据库迁移到新服务器上

介绍

如果您正在运行 Web 应用程序和数据库,比如 LAMP 堆栈,在单个 VPS 上,您可能会遇到想要扩展环境以处理更多的流量的情况。

在本指南中,我们将讨论如何将现有的MySQL数据库迁移到应用程序服务器之外,因为每个应用程序都有其自己的配置奇点,就数据库连接和互动而言,我们将展示WordPress的迁移过程,但您可以将此指南适应任何使用MySQL作为其数据库的其他应用程序。

** 注意:** 如果您想使用单独的数据库服务器进行应用程序的初始设置,因此没有现有数据可保存,您应该阅读以下链接的教程,而不是这个: 如何设置远程数据库以优化网站性能与MySQL

前提条件

本教程假定您有某些Web应用程序和数据库,它们位于同一个服务器上,如下图所示:

LAMP Stack

此类设置的例子是: 如何在Ubuntu 14.04上安装Wordpress

从现在开始,我们将将您的现有服务器称为 lamp-1

您需要创建一个额外的VPS,具有私人网络,它将作为您的单独的MySQL服务器。

我们的目标

当我们完成本教程时,我们想要采取我们的原始 lamp-1 服务器并将其数据库迁移到新的服务器 mysql-1

Separate Database Server

任务来实现我们的目标

有两个主要任务,我们需要完成实现我们的目标:

  1. 将现有数据库迁移到新服务器
  2. 重新配置应用程序以连接到新数据库

让我们开始迁移现有数据库!

将现有数据库迁移到新服务器

创建新的MySQL VPS

您将想要创建新的VPS,这将是您的新的MySQL数据库服务器 - 再次,为参考目的,我们将这个服务器称为 mysql-1. 现在创建新的VPS。

安装和配置MySQL服务器

创建新数据库 VPS 后,连接到它并安装 MySQL Server。

在 mysql-1 上,用以下命令更新 apt:

1sudo apt-get update

然后运行以下 apt 命令来安装 MySQL Server:

1sudo apt-get install mysql-server

输入您的MySQL安装的根密码(您可以使用与原始MySQL服务器相同的密码),然后运行以下命令创建默认MySQL数据库表:

1sudo mysql_install_db

接下来,运行以下命令来完成MySQL安装:

1sudo mysql_secure_installation

您可以回答重置根密码(您刚刚设置的密码),并对其他所有事情说

目前,您的新 MySQL 数据库已配置为只收听 localhost,或 127.0.0.1,我们需要配置您的数据库服务器以收听其私有 IP 地址,以便您的应用程序服务器 lamp-1 可以连接到它。

1sudo vi /etc/mysql/my.cnf

在您的 MySQL 配置文件中找到以下行:

1bind-address            = 127.0.0.1

用您的数据库服务器的私人 IP 地址取代127.0.0.1:

bind-address            = mysql_1_private_IP

如果您需要进行其他 MySQL 配置更改(例如在您的 lamp-1 VPS 上配置的非默认设置),请现在保存并停止操作。

1sudo service mysql restart

现在你的新服务器 mysql-1 正在收听其私人 IP 地址上的 MySQL 流量。

出口原始数据库备份

可选,您可以停止应用程序服务器,以防止在迁移过程中尝试更新现有数据库。

接下来,我们将想要导出您的原始MySQL数据库的备份,这将被用来迁移到我们的新数据库. 我们需要锁定数据库,以便我们可以进行数据卸载。 ** 注意:**锁定您的数据库将阻止更新,所以您的应用程序只能够执行只读操作,直到您完成本教程的其余部分。

** 在 lamp-1** 上,输入 MySQL 控制台:

1mysql -u root -p

要在 lamp-1 上锁定您的数据库,请从 MySQL 控制台运行此操作:

1FLUSH TABLES WITH READ LOCK;
2SET GLOBAL read_only = ON;
3EXIT

现在,从您的命令壳运行以下命令,将原始MySQL服务器上的数据库备份导出到名为dump.sql的文件:

1mysqldump --lock-all-tables -u root -p --all-databases > dump.sql

将您的 dump.sql 文件复制到您的新数据库服务器 mysql-1,使用 scp:

scp dump.sql user@mysql_1_private_IP:/tmp

由于我们将不再在您的原始服务器上使用MySQL,我们可以将其锁定。 _ 如果您想解锁它_,请在MySQL控制台中运行以下命令:

1SET GLOBAL read_only = OFF;
2UNLOCK TABLES;

将原始数据库导入新服务器

现在我们将想将您的原始数据库导入 mysql-1 以便保存所有现有数据。

** 在 mysql-1** 上,运行此命令来导入 dump.sql 文件:

1mysql -u root -p < /tmp/dump.sql

在此时,您的所有原始数据库数据和用户都已被复制到您的新数据库服务器 mysql-1

创建用户允许从 Web 应用程序服务器连接

由于MySQL管理用户的方式(它们被识别为用户名和源主机对),您将需要创建具有匹配应用程序服务器私人IP地址的主机值的新用户。

输入 MySQL 控制台:

1mysql -u root -p

输入以下语句列出所有数据库用户和主机:

SELECT user,host FROM mysql.user;
Example Output:
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| root             | 127.0.0.1 |
| root             | ::1       |
| debian-sys-maint | localhost |
| root             | localhost |
| wordpressuser    | localhost |
+------------------+-----------+
5 rows in set (0.00 sec)

在我们的示例输出中,我们看到有一个名为wordpressuser的用户,其源主机是localhost。假设wordpressuser是我们的应用程序用户. 由于应用程序和数据库现在在单独的服务器上,应用程序将不再连接到localhost。 我们需要创建一个名为wordpressuser的新用户,其 host 值设置为应用程序服务器 lamp-1 的私人 IP 地址,以允许应用程序连接。

创建一个具有相同名称的新用户,但将其主机更改为应用程序服务器的私人IP地址 lamp-1

CREATE USER 'wordpressuser'@'lamp_1_private_IP' IDENTIFIED BY 'password';

对于您想要重建的每个用户,在我们的情况下,运行以下声明来输出其特权(我们需要在一瞬间分配):

SHOW GRANTS FOR wordpressuser@localhost;

Example Output: User Privileges

GRANT USAGE ON *.*之后,请记住一行(s),因为您将使用修改后的版本来授予您刚刚创建的用户权限,例如,基于原始用户的赠款,我们将运行以下声明,将相同的赠款分配给我们的新用户(在本例中,WordPress是数据库名称)。

GRANT ALL PRIVILEGES ON `wordpress`.* TO 'wordpressuser'@'lamp_1_private_IP';

现在向您的新用户显示权限:

SHOW GRANTS FOR wordpressuser@lamp_1_private_IP;

Example Output: User Privileges

完成对相应数据库用户的主机值的更新后,运行下列语句来执行这些更改,然后退出 MySQL 控制台:

1FLUSH PRIVILEGES;
2EXIT

现在,新数据库服务器已迁移和配置,您必须更新应用程序配置以连接到新数据库服务器!

更新应用程序配置

最后一步是更新您的应用程序配置,以指向您的新数据库服务器 mysql-1. 您的配置位置将取决于您的应用程序和您安装的位置,所以我们将使用WordPress作为一个例子。

WordPress 配置示例

WordPress 将其数据库连接配置存储在其安装目录中的一个名为 wp-config.php 的文件中(例如 /var/www/html/)。

打开WordPress配置:

1sudo vi /var/www/html/wp-config.php

寻找下列线条:

1/** MySQL hostname */
2define('DB_HOST', 'localhost');

用您新数据库服务器的私人 IP 地址代替本地托管 mysql-1

define('DB_HOST', 'mysql_1_private_IP');

现在可以像你平常一样访问你的应用程序(_lamp-1_的公共IP地址或域名)。它应该看起来和以前完全相同,但现在它正在连接到你的新服务器上的MySQL数据库, mysql-1!

其他应用

如果您正在运行不同的应用程序,只需更新应用程序的数据库连接配置以使用私有 IP 地址或名称而不是本地主机127.0.0.1

停止 MySQL 在您的原始服务器上

一旦您确认您的应用程序与新的独立的数据库服务器正常工作,您将想要清理原始的MySQL数据库服务器,至少,您将想要停止MySQL服务,以便它停止使用资源。

** 在 lamp-1** 上:运行以下命令以停止 MySQL,并将其设置为 NOT start on boot:

1sudo service mysql stop
2sudo sh -c "echo 'manual' > /etc/init/mysql.override"

结论

现在您的数据库服务器已与应用程序服务器分离,您的环境应该能够处理更多的流量,因为更多的资源被分配给每个组件。

以下是关于可扩展性主题的一些教程:

By Mitchell Anicas
Published At
Categories with 技术
comments powered by Disqus