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

如何迁移现有的MySQL数据库关闭您的应用程序服务器扩展您的环境。因为每个应用程序都有自己的配置怪癖,关于数据库的连接和互动,我们将展示与WordPress迁移过程,但你可以本指南,使用MySQL作为其数据库的任何其他应用程序进行调整。

介绍

如果您在单个VPS上运行Web应用程序和数据库(例如LAMP),则可能遇到需要扩展环境以处理更多流量的情况。 开始扩展环境的一个好方法是将数据库服务器迁移到同一数据中心中的另一个独立VPS。

在本指南中,我们将讨论如何将您的现有MySQL数据库从应用程序服务器迁移。 因为每个应用程序都有自己的配置疑问,关于数据库连接和交互,我们将演示使用WordPress的迁移过程,但是您可以将本指南适用于使用MySQL作为其数据库的任何其他应用程序。

注意:如果你想要做你的应用程序的初始设置一个单独的数据库服务器,因此没有现有的数据保护,你应该阅读以下链接的教程,而不是这一个: 如何建立一个远程数据库来优化网站性能与MySQL

先决条件

本教程假设您有一些Web应用程序和数据库驻留在同一个服务器上,如图所示:

灯泡

这种设置的一个例子是: 如何在Ubuntu 14.04安装WordPress

从现在开始,我们将把现有的服务器作为灯1。

您将需要创建一个额外的VPS,与私有网络,将作为您的单独的MySQL服务器。 作为参考,我们称这台服务器的mysql-1。

我们的目标

当我们在本教程结束后,我们希望把我们的原装灯泡-1的服务器和其数据库迁移到新服务器,MySQL-1。

单独的数据库服务器

达成我们目标的任务

我们需要完成两个主要任务来完成我们的目标:

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

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

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

创建新的MySQL VPS

您将要创建新的VPS,这将是新的MySQL数据库服务器-再次,仅供参考用途,我们称这台服务器的mysql-1。 现在创建新的VPS。 如果你没有,你的服务器上做一个标准的设置,你可能要采取的步骤此链接1-4: 初始服务器设置与Ubuntu 14.04

安装和配置MySQL服务器

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

在MySQL-1,更新容易用下面的命令:

sudo apt-get update

然后运行以下apt命令安装MySQL服务器:

sudo apt-get install mysql-server

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

sudo mysql_install_db

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

sudo mysql_secure_installation

您可以响应“否”重置root密码(您刚才设置的密码),对于其他所有内容为“是”。

目前,您的新MySQL数据库配置为仅侦听localhost或127.0.0.1。 我们需要配置数据库服务器侦听其私有IP地址,以便您的应用服务器, 灯1,可以连接到它。 打开您的MySQL配置进行编辑:

sudo vi /etc/mysql/my.cnf

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

bind-address            = 127.0.0.1

替换127.0.0.1与数据库服务器的私有IP地址:

bind-address            = mysql_1_private_IP

如果你(你的灯1 VPS已配置,如非默认设置)任何其他MySQL配置的更改,现在就做,然后保存并退出。 为了使这些更改生效,请使用以下命令重新启动mysql:

sudo service mysql restart

现在,你的新服务器,MySQL-1监听其私有IP地址的MySQL业务。 接下来,我们将努力导出您的原始数据库。

导出原始数据库的备份

或者 ,你可能会停止您的应用服务器,以防止在迁移过程中,试图更新现有的数据库。 数据库将被锁定,但它是你可能想要考虑的东西。

接下来,我们将要导出您的原始MySQL数据库的备份,这将用于迁移到我们的新数据库。 我们需要锁定数据库,所以我们可以做数据转储注:锁定你的数据库将阻止更新,所以你的应用程序将只能够做只读操作,直到完成本教程的其余部分。

在灯1,进入MySQL控制台:

mysql -u root -p

要在灯1锁定你的数据库,从MySQL控制台运行如下命令:

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

现在,从命令shell中运行以下命令导出数据库的备份你原来的MySQL服务器到一个名为上dump.sql

mysqldump --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控制台下面的命令:

SET GLOBAL read_only = OFF;
UNLOCK TABLES;

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

现在我们将要导入原始数据库到mysql-1,因此所有现有的数据将被保留。

在MySQL-1,运行此命令导入dump.sql文件:

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

在这一点上,你的所有原始数据库的数据和用户都被复制到新的数据库服务器,MySQL-1。 下一步是创建具有与原始数据库用户相同的特权的新数据库用户。

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

由于MySQL管理其用户(它们被标识为用户名和源主机对)的方式,您将不得不使用与您的应用程序服务器的私有IP地址匹配的“主机”值创建新用户。

进入MySQL控制台:

mysql -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设置为应用服务器灯-1的私有IP地址的主机的值,以允许应用程序连接。

创建具有相同名称的新用户,但改变其主机到应用服务器的私有IP地址, 灯1。 此外,请确保您的密码与用户的原始密码匹配(用您自己的密码替换所有突出显示的项目):

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

对于要重新创建的每个用户,wordpressuser在我们的情况下,运行下面的语句来输出它的特权(我们将需要在某一时刻分配):

SHOW GRANTS FOR wordpressuser@localhost;

示例输出:
用户权限

请记后线(S)的GRANT USAGE ON *.* ,因为你将使用它修改的版本权限授予您刚创建的用户。 例如,在原有基础上用户的补助,我们会运行下面的语句给我们的新用户相同的补助金( wordpress是数据库名称,在这个例子中)。 这是上面的输出的一个副本,但localhost已被更改为我们的灯-1的私有IP地址:

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

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

SHOW GRANTS FOR wordpressuser@lamp_1_private_IP;

示例输出:
用户权限

完成更新适当数据库用户的主机值后,请运行以下语句以使这些更改生效并退出MySQL控制台:

FLUSH PRIVILEGES;
EXIT

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

更新应用程序配置

最后一步是更新你的应用程序配置,以指向新的数据库服务器,MySQL-1。 配置的位置将根据您的应用程序和安装位置而有所不同,因此我们将使用WordPress作为示例。

WordPress示例配置

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

打开WordPress配置:

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

查找以下行:

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

替换localhost与新数据库服务器的私有IP地址, 的mysql-1。 它应该看起来像这样(替换突出显示):

define('DB_HOST', 'mysql_1_private_IP');

保存并退出。 现在访问你的应用程序你怎么做正常( 灯-1的公网IP地址或域名)。 它应该看起来完全一样的,因为它使用,但现在它连接到MySQL数据库的新服务器上,MySQL的-1!

其他应用

如果您正在运行不同的应用程序,只需更新应用程序的数据库连接配置,以使用专用IP地址或名称,而不是“localhost”或“127.0.0.1”。 根据应用程序处理数据库连接的方式,可能需要重新启动应用程序以连接到新数据库。

在原始服务器上停止MySQL

在您确认您的应用程序与新的,单独的数据库服务器正常工作后,您将需要清理您的原始MySQL数据库服务器。 最低限度,您将要停止MySQL服务,因此停止使用资源。

在灯1:运行以下命令停止MySQL和将其设置为不开机启动:

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

结论

现在您的数据库服务器已与应用程序服务器分离,您的环境应该能够处理更多的流量,因为更多的资源专用于每个组件。 此外,您的环境现在更好地准备好其他改进,如负载平衡和数据库复制。

这里有一些关于可扩展性主题的教程:

作者:Mitchell Anicas