服务器迁移:mysql

服务器迁移:mysql

更换服务器时移动 mysql 的最好和最快的方法是什么?

目前我通过 phpmyadmin 进行此操作,我在旧服务器中备份数据库,在新服务器中打开新用户,创建新数据库并上传/恢复备份。

(我使用类似的东西来加速使用 mysql 终端的数据库恢复。)

mysql -u username -p database < /var/www/html/mysql_dump/nomedb.sql

一个漫长而繁琐的操作...能否以更好更快的方式将数据库和 mysql 用户复制到新服务器?

我有 ssh 访问权限和服务器根目录、ubuntu 20.04 服务器、apache、php8.1

- - - - - 更新 - - - - -

为了完整起见,我经常使用此脚本进行 mysql 备份,并使用 rsync 将所有内容下载到本地磁盘,因此备份数据库不是问题。繁琐的部分是逐个恢复它们... https://www.alebalweb-blog.com/66-backup-automatico-mysql-su-server-ubuntu.html (抱歉,描述是意大利语,但几乎全是代码......)

答案1

“最佳” 相当主观,会有不同的看法,但这通常是我在设置新的 MySQL 数据库时遵循的方法:

在新服务器上……

  1. 创建所有数据库
    CREATE DATABASE `{dbname}` DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
    CREATE DATABASE …
    CREATE DATABASE … 
    
  2. 创建所有用户帐户并设置权限:
    CREATE USER '{user}'@'localhost' IDENTIFIED WITH mysql_native_password BY 'superSecretPassword!123';
    GRANT ALL ON `{dbname}`.* TO '{user}'@'localhost';
    CREATE USER …
    GRANT ALL …
    

在源服务器上……

  1. 逐个导出数据库:

    sudo mysqldump {dbname} -n --routines --triggers > dbname.sql
    

    笔记:如果您更喜欢 phpMyAdmin 或其他工具,则无需使用命令行。

    -n禁止 CREATE DATABASE ... IF EXISTS 语句

    --routines转储存储例程(函数和过程)

    --triggers⇢ 转储每个转储表的触发器

  2. 打包并压缩数据库转储以便于传输:

    sudo tar -czvf dbs.tar.gz *.sql
    
  3. 将压缩文件复制/发送到新服务器

在新服务器上……

  1. 从压缩文件中提取数据库:
    tar -xvf dbs.tar.sql
    
  2. 导入数据库:
    sudo mysql dbname < dbname.sql
    sudo mysql dbname …
    
  3. (可选)重新启动 MySQL 以清除缓冲区:
    sudo service mysql restart
    
  4. 享受短暂的休息

还有其他方法可以做到这一点,但我遵循这个过程,因为它允许我避免覆盖mysql系统表的不同版本的问题(如果新服务器不是完全相同的版本),同时确保所有数据,帐户,权限和功能/程序/触发器都到位。

相关内容