将 Ubuntu 20.04 LAMP 从 MySQL 迁移到 MariaDB

将 Ubuntu 20.04 LAMP 从 MySQL 迁移到 MariaDB

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

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

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

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

答案1

撰写“权威指南”将很困难每一个由于每个服务器都不同,因此必须考虑版本以及数据库引擎等。也就是说,基础看起来是这样的:

1 — 导出所有数据库(保留完整的程序和触发器)

首先,也是最重要的事情是,您首先要导出所有数据库。不过,有些数据库您以后将不再需要,因此让我们导出只是您关心的:

mysqldump -u {user} -p --events --routines --triggers wordpress > wordpress-export.sql
mysqldump -u {user} -p --events --routines --triggers drupal > drupal-export.sql
mysqldump -u {user} -p --events --routines --triggers phpmyadmin > phpmyadmin-export.sql

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

我不建议--all-databases在这里使用该标志,因为它将包含三个 MySQL 特定的表,这些表不应安装在您即将创建的 MariaDB 安装中。

2 — 准备数据库帐户列表

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

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

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

这将输出类似以下内容的内容:

CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'CorrectHorseBatteryStaple';
CREATE USER 'drupal'@'localhost' IDENTIFIED BY 'CorrectHorseBatteryStaple';
CREATE USER 'admin'@'%' IDENTIFIED BY 'CorrectHorseBatteryStaple';

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

3 - 从服务器中彻底消除 MySQL

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

  1. 确保 MySQL 没有运行:
    sudo systemctl stop mysql
  2. 完全删除 MySQL:
sudo apt purge mysql-server \ 
               mysql-client \ 
               mysql-common \ 
               mysql-server-core-* \ 
               mysql-client-core-*
  1. 消除 MySQL 配置、数据和日志目录:
sudo rm -Rf /etc/mysql /var/lib/mysql /var/log/mysql
  1. 确保所有东西都符合犹太教规apt
sudo apt autoremove
sudo apt autoclean

4 - 安装MariaDB服务器

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

sudo apt install mariadb-server
sudo mysql_secure_installation

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

当你跑步时mysql_secure_installation你会被问到这些问题:

  1. Enter current password for root (enter for none):⇠ 按下Enter按键
  2. Set root password? [Y/n]⇠ 选择Y
  3. Enter password⇠ 输入一个好的名称,然后在要求确认时再次输入。

root现在,由于您无法以非用户身份登录sudo,因此您可能需要创建具有所需所有管理员权限的帐户。

  1. 登录MariaDB:
    sudo mysql -u root -p
  2. 输入您之前定义的密码。
  3. 创建您的帐户:
    CREATE USER 'admin'@'localhost' IDENTIFIED BY 'CorrectHorseBatteryStaple';
    笔记:请务必将帐户名称更改admin为您想要的名称,并将其CorrectHorseBatteryStaple更改为您能记住的鲜为人知的密码。
  4. 授予所有权限,可以执行所有操作:
    GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
  5. 清除权限:
    FLUSH PRIVILEGES;很重要

5 — 重新创建用户帐户

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

CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'CorrectHorseBatteryStaple';
CREATE USER 'drupal'@'localhost' IDENTIFIED BY 'CorrectHorseBatteryStaple';

笔记:确保将用户名和密码设置为您真正想要的。

6 — 重新创建数据库

对于您需要的每个数据库,在 MariaDB 中运行此操作:

CREATE DATABASE wordpress CHARACTER SET = utf8 COLLATE = utf8_general_ci;

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

7 — 将所有数据库导入到新数据库

mysql -u {user} -p wordpress < wordpress-export.sql

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

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

现在我们要为之前创建的账户设置权限:

GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'localhost';

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

FLUSH PRIVILEGES;

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

更多重要说明:

我要推荐一件事,事先测试一下。我见过很多 MySQL⇢MariaDB 迁移出现问题,然后人们疯狂地打电话给我解决问题。测试,测试,再测试。MySQL 中的某些功能在 MariaDB 中无法透明地工作。您不想在迁移过程中发现表需要更改排序规则或导入文件已损坏。

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

答案2

关于“权威指南”答案中的用户和授权 - 这些命令也应该保留密码(未经测试):

echo "SELECT CONCAT('SHOW CREATE USER ''', User, '''@''', HOST, ''';') AS cmd1, CONCAT('SHOW GRANTS FOR ''', User, '''@''', HOST, ''';') AS cmd2 FROM mysql.user WHERE User NOT LIKE 'mysql.%' AND User NOT IN ('root', 'debian-sys-maint');" | mysql -u root -p -N > "users_and_grants_cmds.sql"
mysql -u root -p -N < "users_and_grants_cmds.sql" > "users_and_grants.sql"

相关内容