将 Ubuntu 20.04 LAMP 从 MySQL 迁移到 MariaDB

yup*_*guy 5 server lamp mysql mariadb

状态
我目前在 Ubuntu 20.04 上运行 LAMP 服务器,该服务器有一个包含多个 Drupal 和 Wordpress 数据库以及 PHPMYADMIN 数据库的 MySQL 服务器。

请求
是否有一些超级聪明的 MySQL 数据库专家愿意发布关于如何将工作数据库从 LAMP(MySQL 服务器)迁移到 LAMP(MariaDB 服务器)的“权威指南”,包含

1.)“第1步”=导出所需的工作数据库,
2.)完全删除MySQL服务器,#如果有必要,我知道Mariadb是一个dropin
3.)安装到MariaDB服务器,
4.)和“最后一步" = 导入所需的工作数据库?

我在网上搜索了好几天,可以在网上找到“零碎”的教程。我认为 MariaDB 获得了市场份额,这样的教程对于 Ubuntu 18.04 / 20.04 用户来说很有价值。如果这样的指南已经存在,请转发:-)

小智 11

由于每个服务器都不同,因此很难针对每种情况编写“权威指南”。必须考虑版本以及数据库引擎等。也就是说,基本原理如下:

\n

1 \xe2\x80\x94 导出所有数据库(过程和触发器完好无损)

\n

第一个 \xe2\x80\x94 和最重要的 \xe2\x80\x94 是您首先导出所有数据库。不过,有些内容您以后不需要继续,所以让我们导出您关心的内容:

\n
mysqldump -u {user} -p --events --routines --triggers wordpress > wordpress-export.sql\nmysqldump -u {user} -p --events --routines --triggers drupal > drupal-export.sql\nmysqldump -u {user} -p --events --routines --triggers phpmyadmin > phpmyadmin-export.sql\n
Run Code Online (Sandbox Code Playgroud)\n

请务必更改{user}为数据库中具有最高权限的用户帐户,否则可能会导致导出不完整。请务必将数据库名称更改为其正确名称,并将导出名称更改为唯一的名称。

\n

我不建议--all-databases在此处使用该标志,因为它将包含三个特定于 MySQL 的表,这些表不应针对即将创建的 MariaDB 安装进行安装。

\n

2 \xe2\x80\x94 准备数据库帐户列表

\n

当您构建新数据库时,确保所有重要用户帐户都存在非常重要。我们可以查询数据库来查看用户帐户名称,更重要的是,我们可以查询数据库来构建CREATE我们稍后在本指南的第 5 步中需要的语句。

\n

登录到您的 MySQL 安装并运行以下查询:

\n
SELECT CONCAT(\'CREATE USER \'\'\', `User`, \'\'\'@\'\'\', `Host`, \'\'\' IDENTIFIED BY \'\'CorrectHorseBatteryStaple\'\';\') as `username`\n  FROM mysql.user\n WHERE `User` NOT LIKE \'mysql.%\' and `User` NOT LIKE \'slave%\'\n   and `User` NOT IN (\'root\', \'debian-sys-maint\')\n ORDER BY `username`;\n
Run Code Online (Sandbox Code Playgroud)\n

这将输出类似:

\n
CREATE USER \'wordpress\'@\'localhost\' IDENTIFIED BY \'CorrectHorseBatteryStaple\';\nCREATE USER \'drupal\'@\'localhost\' IDENTIFIED BY \'CorrectHorseBatteryStaple\';\nCREATE USER \'admin\'@\'%\' IDENTIFIED BY \'CorrectHorseBatteryStaple\';\n
Run Code Online (Sandbox Code Playgroud)\n

将此列表保存到某个文件中,因为您很快就会需要它。

\n

3 \xe2\x80\x94 从服务器中彻底消除MySQL

\n

如果您 100% 确定从 MySQL 数据库中获得了所需的所有内容,那么现在是时候将其从服务器中清除了。

\n
    \n
  1. 确保 MySQL 没有运行:
    sudo systemctl stop mysql
  2. \n
  3. 完全删除MySQL:
  4. \n
\n
sudo apt purge mysql-server \\\xc2\xa0\n               mysql-client \\\xc2\xa0\n               mysql-common \\\xc2\xa0\n               mysql-server-core-* \\ \n               mysql-client-core-*\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. 删除 MySQL 配置、数据和日志目录:
  2. \n
\n
sudo rm -Rf /etc/mysql /var/lib/mysql /var/log/mysql\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. 确保一切都是洁净的apt
  2. \n
\n
sudo apt autoremove\nsudo apt autoclean\n
Run Code Online (Sandbox Code Playgroud)\n

4 \xe2\x80\x94 安装 MariaDB 服务器

\n

接下来是 MariaDB 安装。我不会逐步介绍您可能想要安装的所有不同配置选项,但会指出一些可能使您的生活更轻松的选项。首先,让我们安装它:

\n
sudo apt install mariadb-server\nsudo mysql_secure_installation\n
Run Code Online (Sandbox Code Playgroud)\n

虽然 MariaDB安装在您的服务器上,但您将使用的大多数工具都将针对 MySQL。这就是为什么第二个命令的mysql_secure_installation名称更合适。

\n

当您运行时,mysql_secure_installation系统会询问您以下问题:

\n
    \n
  1. Enter current password for root (enter for none):\xe2\x87\xa0 按一下Enter
  2. \n
  3. Set root password? [Y/n]\xe2\x87\xa0 选择Y
  4. \n
  5. Enter password\xe2\x87\xa0 输入一个好的值,然后在要求确认时再次输入。
  6. \n
\n

root现在,由于您无法在没有 的情况下登录sudo,因此您可能需要创建具有您可能需要的所有管理员权限的帐户。

\n
    \n
  1. 登录 MariaDB:
    sudo mysql -u root -p
  2. \n
  3. 输入您之前定义的密码。
  4. \n
  5. 创建您的帐户:
    CREATE USER \'admin\'@\'localhost\' IDENTIFIED BY \'CorrectHorseBatteryStaple\';
    注意:请务必更改admin为您希望为您的帐户命名的任何名称,以及CorrectHorseBatteryStaple您会记住的鲜为人知的密码。
  6. \n
  7. 授予所有特权,使其能够执行...所有操作:
    GRANT ALL PRIVILEGES ON *.* TO \'admin\'@\'localhost\' WITH GRANT OPTION;
  8. \n
  9. 刷新权限:
    FLUSH PRIVILEGES;\xe2\x87\xa0非常重要
  10. \n
\n

5 \xe2\x80\x94 重新创建用户帐户

\n

使用您之前准备的列表,重新创建 WordPress、Drupal 和(可能)phpMyAdmin 所需的各种用户帐户。

\n
CREATE USER \'wordpress\'@\'localhost\' IDENTIFIED BY \'CorrectHorseBatteryStaple\';\nCREATE USER \'drupal\'@\'localhost\' IDENTIFIED BY \'CorrectHorseBatteryStaple\';\n
Run Code Online (Sandbox Code Playgroud)\n

注意:请务必将用户名和密码设置为您真正想要的。

\n

6 \xe2\x80\x94 重新创建数据库

\n

对于您需要的每个数据库,在 MariaDB 中运行以下命令:

\n
CREATE DATABASE wordpress CHARACTER SET = utf8 COLLATE = utf8_general_ci;\n
Run Code Online (Sandbox Code Playgroud)\n

当然,更改wordpress为您要创建的数据库的实际名称。

\n

7 \xe2\x80\x94 将所有数据库导入到新数据库中

\n
mysql -u {user} -p wordpress < wordpress-export.sql\n
Run Code Online (Sandbox Code Playgroud)\n

对导出的每个数据库执行此操作,用正确的名称和 SQL 文件替换数据库名称和 SQL 文件。如果您犯了错误并将文件导入到错误的数据库中,请不要担心,您可以像这样“修复”它:

\n
    \n
  1. 连接到 MariaDB:
    mysql -u admin -p
  2. \n
  3. 输入您的密码
  4. \n
  5. 删除您不小心导入的数据库:
    DROP DATABASE whoopsie;
  6. \n
  7. 重新创建数据库:
    CREATE DATABASE whoopsie CHARACTER SET = utf8 COLLATE = utf8_general_ci;
  8. \n
  9. 重新导入正确的文件。
  10. \n
\n

现在我们可以为之前创建的帐户设置权限:

\n
GRANT ALL PRIVILEGES ON wordpress.* TO \'wordpress\'@\'localhost\';\n
Run Code Online (Sandbox Code Playgroud)\n

再次对每个帐户执行此操作,确保他们有权访问正确的数据库。完成后,刷新权限以确保它们处于活动状态:

\n
FLUSH PRIVILEGES;\n
Run Code Online (Sandbox Code Playgroud)\n

现在,在此阶段,您可以仔细检查所有网站的数据库名称、帐户名称和密码是否正确。如果一切正常,请重新启动您的网络服务器并进行测试。

\n

更重要的注意事项:

\n

我会推荐一件事,提前测试一下。我见过很多 MySQL\xe2\x87\xa2MariaDB 迁移出现问题,然后人们以疯狂的速度叫我来解决问题。测试,测试,测试。MySQL 中的某些功能在 MariaDB 中无法透明地工作。您不希望在迁移过程中发现表需要更改排序规则或导入文件已损坏。

\n

如果您有使用虚拟机的经验,那么这些是测试迁移的理想选择。

\n