更换服务器时移动 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 数据库时遵循的方法:
在新服务器上……
- 创建所有数据库
CREATE DATABASE `{dbname}` DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE DATABASE … CREATE DATABASE …
- 创建所有用户帐户并设置权限:
CREATE USER '{user}'@'localhost' IDENTIFIED WITH mysql_native_password BY 'superSecretPassword!123'; GRANT ALL ON `{dbname}`.* TO '{user}'@'localhost'; CREATE USER … GRANT ALL …
在源服务器上……
逐个导出数据库:
sudo mysqldump {dbname} -n --routines --triggers > dbname.sql
笔记:如果您更喜欢 phpMyAdmin 或其他工具,则无需使用命令行。
-n
禁止 CREATE DATABASE ... IF EXISTS 语句--routines
转储存储例程(函数和过程)--triggers
⇢ 转储每个转储表的触发器打包并压缩数据库转储以便于传输:
sudo tar -czvf dbs.tar.gz *.sql
将压缩文件复制/发送到新服务器
在新服务器上……
- 从压缩文件中提取数据库:
tar -xvf dbs.tar.sql
- 导入数据库:
sudo mysql dbname < dbname.sql sudo mysql dbname …
- (可选)重新启动 MySQL 以清除缓冲区:
sudo service mysql restart
- 享受短暂的休息
还有其他方法可以做到这一点,但我遵循这个过程,因为它允许我避免覆盖mysql
系统表的不同版本的问题(如果新服务器不是完全相同的版本),同时确保所有数据,帐户,权限和功能/程序/触发器都到位。