服务器迁移MySQL

由于公司原有的服务器不再使用,需要将老的服务器上的MySQL迁移到新的服务器上,因此需要对数据进行备份迁移,前提是两台服务器已安装相同版本的MySQL,这里就不再讲解MySQL的安装步骤了,可以安装包、可以在线下载、可以容器部署等等,以下只做数据的备份迁移。

方式一:将原服务器的MySQL停掉,打包data,scp到新的服务器,在进行解压。这种方式是有风险的,需要考虑MySQL是否能够正常启停、项目上是否在用或者项目是否上线,如果项目已上线,这种方式是不可取的,如果是只有开发在用的话打过招呼应该是可以的。

方式二:使用MySQLdump的方式对全库、单库、指定表进行备份迁移

使用 ps -ef | grep mysql 可以找到MySQL的启动指令,也可以知道MySQL的部署路径,我们先切换路径到 bin 目录下,因为所有的可执行文件都是放在了bin目录下的

接下来我们就可以对全库、单库、指定表进行备份迁移了

全库:

/path/to/mysqldump  -h xxxx.xx.xx.xx -P端口   -u用户名 -p --all-databases>/path/to/all_databases.sql

在这里就成功的将服务器MySQL内的所有数据库进行了备份,全库8G

单库:

如果我们想要对单个库进行备份,那么只需要加一个参数就可以了:--databases

/path/to/mysqldump  -hxxxx.xx.xx.xx -P端口 --no-create-db  -utdxx -p --databases analyse_augment>/data/beifei/analyse_augment1.sql

这里边我又多加了一个   --no-create-db 参数,这个参数的目的输在生成 SQL 脚本的时候不生成 create database 语句,因为我们后续可能会将生成的脚本放到别的库,此外,在生成脚本的时候还会生成 use database 的语句,这里我们也是不需要的,如果我们直接使用 vi/vim 对SQL文件进行编辑,那么很不幸,大文件是很难搞的,我们可以使用 Linux 三剑客之一的 sed 进行处理:

sed -i 's/USE `analyse_augment`;/ /g' 文件名

 在这里我们将 USE `analyse_augment`; 替换成为了 空格,这对整个脚本是没有影响的,也正是我们想要的

指定表:

此外,我们还可以针对某个库中的指定表进行备份

/path/to/mysqldump  -hxxxx.xx.xx.xx -P端口 --no-create-db  -utdxx -p --databases 库名 表1 表2 > /data/beifei/tables_backup_202501151130.sql

 

备份完成之后,我们需要将生成的脚本 scp 到新的服务器内

 scp -r ./beifei/ td_gyfx_01@132.252.204.30:/data/beifei/

 

OK,到这里基本已经完成了百分之九十了,最后要做的就是将SQL脚本内的数据搞到数据库里

全部数据库
/path/to/mysqldump  -hxxxx.xx.xx.xx -P端口  -u用户名 -p < all_databases.sql
单个数据库
/path/to/mysqldump  -hxxxx.xx.xx.xx -P端口  -u用户名 -p test < /data/beifei/analyse_augment1.sql

指定表

/path/to/mysqldump  -hxxxx.xx.xx.xx -P端口  -u用户名 -p test < /data/beifei/表.sql

 其实指定表和指定数据库的数据恢复是一致的,因为在生成SQL脚本的时候会生成

drop table if exist

至此,我们实现了数据的迁移工作,最后,我们可以去验证一下

原服务器

新服务器

 

<think> 我们正在迁移MySQL服务器,从源服务器11.21.1.31迁移到目标服务器11.21.1.120。迁移过程通常包括以下步骤: 1. 在源服务器上备份数据库 2. 将备份文件传输到目标服务器 3. 在目标服务器上恢复数据库 注意:假设我们使用mysqldump进行备份,并且使用SSH进行文件传输。同时假设我们有足够的权限操作这两台服务器。 具体步骤如下: 步骤1:在源服务器(11.21.1.31)上备份数据库 使用mysqldump命令备份数据库,假设数据库名为`mydatabase`,备份文件为`mydatabase.sql`。 步骤2:将备份文件从源服务器传输到目标服务器(11.21.1.120) 使用scp命令进行传输。 步骤3:在目标服务器上恢复数据库 首先需要确保目标服务器上已经安装了MySQL,并且有对应的数据库(如果没有则需要创建),然后使用mysql命令导入数据。 但是,请注意,如果数据库很大,可能需要考虑使用其他方法(如主从复制)来减少停机时间。这里我们假设使用mysqldump是可行的。 详细命令如下: 1. 在源服务器上执行备份(在11.21.1.31上执行): ```bash mysqldump -u [用户名] -p[密码] --single-transaction --routines --triggers --events --databases mydatabase > mydatabase.sql ``` 注意:`-p`后面可以直接接密码(没有空格),但这样会暴露在历史命令中。更安全的方式是使用`-p`然后交互输入密码。 2. 将备份文件传输到目标服务器(在11.21.1.31上执行): ```bash scp mydatabase.sql root@11.21.1.120:/目标路径/ ``` 注意:这里使用root用户,也可以使用其他具有写入权限的用户。需要输入目标服务器上对应用户的密码。 3. 在目标服务器上恢复数据库(登录到11.21.1.120执行): ```bash mysql -u root -p < /目标路径/mydatabase.sql ``` 但是,如果目标服务器上还没有创建数据库,需要先创建(因为备份文件中虽然包含CREATE DATABASE语句,但取决于备份参数)。在备份时我们使用了`--databases`,所以备份文件会包含创建数据库和切换数据库的语句。 注意事项: - 确保目标服务器MySQL服务已经安装并运行。 - 确保目标服务器MySQL有足够的权限创建数据库和表。 - 如果数据库很大,备份和传输可能需要较长时间。 - 迁移过程中,源数据库应该停止写入(或者使用锁表)以保证数据一致性。在备份命令中我们使用了`--single-transaction`(针对InnoDB)可以在一定程度上保证一致性,但非InnoDB表可能需要锁表。 更安全的做法是在迁移期间将应用停止,避免写入。 另一种方法是使用主从复制进行迁移,但需要配置复制环境。 考虑到用户要求提供全命令,这里我们提供一个完整示例(假设数据库名为`mydb`,用户名为`admin`,密码为`password`,目标服务器上备份文件存放路径为`/backup`): 步骤1:在源服务器(11.21.1.31)备份 ```bash mysqldump -u admin -p --single-transaction --routines --triggers --events --databases mydb > mydb.sql ``` 执行后会提示输入密码。 步骤2:传输备份文件到目标服务器 ```bash scp mydb.sql root@11.21.1.120:/backup/ ``` 步骤3:在目标服务器恢复 首先登录到目标服务器(11.21.1.120),然后执行: ```bash mysql -u root -p < /backup/mydb.sql ``` 注意:以上命令需要根据实际情况修改用户名、密码、路径和数据库名。 如果希望一行命令完成(包括传输和恢复),可以在目标服务器上执行从源服务器拉取并恢复(需要目标服务器可以访问源服务器): ```bash # 在目标服务器上执行(11.21.1.120) ssh root@11.21.1.31 "mysqldump -u admin -p'密码' --single-transaction --routines --triggers --events --databases mydb" | mysql -u root -p'密码' ``` 注意:这种方法需要目标服务器可以通过ssh登录到源服务器,并且需要将密码写在命令中(有安全风险)。另外,确保目标服务器mysql命令可以直接执行(即已经设置了密码等)。 考虑到安全,建议使用交互式输入密码的方式。 根据以上说明,我们提供两种方案:分步执行和命令组合执行。 分步执行更安全,也便于排查问题。 相关问题: 1. 如何在不停止MySQL服务的情况下进行数据库迁移? 2. 使用mysqldump备份时如何保证数据一致性? 3. 如何优化大数据库迁移速度? 4. 迁移后如何验证数据的完整性和一致性? 5. 如果迁移过程中出现错误,如何回滚? </think> 以下是MySQL数据库从11.21.1.31迁移到11.21.1.120服务器的完整命令流程,包含关键步骤和注意事项: ### 📦 迁移流程图 ```mermaid graph LR A[源服务器 11.21.1.31] --> B[备份数据库] B --> C[数据传输] C --> D[目标服务器 11.21.1.120] D --> E[恢复数据库] ``` ### 🔧 完整迁移命令流程 #### 步骤1:源服务器备份数据库 ```bash # 登录源服务器 ssh root@11.21.1.31 # 创建备份目录 mkdir -p /backup/mysql # 完整数据库备份(所有数据库mysqldump --single-transaction --routines --triggers --events \ --all-databases -u root -p > /backup/mysql/full_backup_$(date +%F).sql # 验证备份完整性 ls -lh /backup/mysql/*.sql ``` #### 步骤2:数据传输到目标服务器 ```bash # 使用SCP传输(推荐) scp /backup/mysql/full_backup_*.sql root@11.21.1.120:/tmp/ # 或者使用rsync(增量传输) rsync -avz -e ssh /backup/mysql/ root@11.21.1.120:/tmp/mysql_backup/ ``` #### 步骤3:目标服务器恢复数据库 ```bash # 登录目标服务器 ssh root@11.21.1.120 # 停止MySQL服务 systemctl stop mysqld # 创建恢复目录 mkdir -p /restore/mysql mv /tmp/full_backup_*.sql /restore/mysql/ # 恢复数据库(重要:先检查SQL文件头) mysql -u root -p < /restore/mysql/full_backup_*.sql # 启动MySQL服务 systemctl start mysqld # 验证恢复 mysql -u root -p -e "SHOW DATABASES; SELECT COUNT(*) AS user_count FROM mysql.user;" ``` ### ️ 关键注意事项 1. **版本兼容性** 确认目标服务器MySQL版本 ≥ 源服务器版本: ```bash # 源服务器检查 mysql -V # 目标服务器检查 ssh root@11.21.1.120 "mysql -V" ``` 2. **大数据库优化** 若数据库较大(>10GB),使用压缩传输: ```bash # 源端压缩 tar czf mysql_backup.tar.gz /backup/mysql/*.sql # 压缩传输 scp mysql_backup.tar.gz root@11.21.1.120:/tmp/ # 目标端解压 tar xzf /tmp/mysql_backup.tar.gz -C /restore/mysql/ ``` 3. **权限保留** 使用 `--skip-grant-tables` 时需手动恢复权限: ```bash # 恢复后执行 mysql_upgrade -u root -p --force mysql -u root -p -e "FLUSH PRIVILEGES;" ``` 4. **字符集验证** 防止编码不一致导致乱码: ```bash # 备份时指定字符集 mysqldump ... --default-character-set=utf8mb4 ... # 恢复时指定字符集 mysql ... --default-character-set=utf8mb4 ... ``` ### 🔍 迁移后验证 ```bash # 表数量对比 ssh root@11.21.1.31 "mysql -u root -p -e 'SELECT COUNT(*) FROM information_schema.tables'" ssh root@11.21.1.120 "mysql -u root -p -e 'SELECT COUNT(*) FROM information_schema.tables'" # 关键数据校验 ssh root@11.21.1.120 "mysql -u root -p -e 'CHECKSUM TABLE important_table;'" ``` ### 📚 迁移原理 MySQL迁移本质是数据逻辑导出(逻辑备份)和导入过程: $$ \text{迁移完整性} = \text{备份一致性} + \text{传输完整性} + \text{恢复准确性} $$ 其中`mysqldump`的`--single-transaction`参数通过InnoDB多版本控制(MVCC)实现热备份[^1]。 --- ### ✨ 迁移方案对比 | 方法 | 适用场景 | 停机时间 | 复杂度 | |------|----------|----------|--------| | **mysqldump** | <50GB数据库 | 中等 | ★★☆ | | **xtrabackup** | >50GB数据库 | 短 | ★★★ | | **主从复制** | 零停机迁移 | 接近0 | ★★★★ |
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yangjiwei0207

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值