mysql数据迁移

0、mysqldump路径

1、数据导出 

1.1 从宿主机导出
备份整个库的表
mysqldump -h xxx.xxx.x.xxx -P 3307  -u root  -pxxxxx  abrbak > abrbak_full_backup.sql


备份多张表(结构+数据)

mysqldump -h xxx.xxx.x.xxx -P 3307  -u root  -pxxxxx  abrbak --tables chat_log chat_session task_baseinfo abr_sms_task abr_call_task task_detail > abrbak_tables.sql


只备份表结构

mysqldump -h xxx.xxx.x.xxx -P 3307 -u root -pxxxxx abrbak --no-data > abrbak_structure.sql

代码解释

这个命令是一个使用mysqldump工具来备份MySQL数据库中指定表的示例。命令各部分的含义如下:

  • mysqldump: MySQL数据库备份工具,用于导出数据库的结构和数据为SQL格式的文件。

  • -h xxx.xxx.x.xxx: 指定数据库服务器的IP地址为xxx.xxx.x.xxx

  • -P 3307: 指定数据库服务的端口号为3307,注意-P是大写的,区别于小写-p,后者用于指定密码。

  • -u root: 指定数据库的用户名为root。

  • -pxxxxxx: 指定连接数据库的密码为xxxxxx。这里密码紧跟在-p后面,没有空格。

  • abrbak: 指定要备份的数据库名为abrbak

  • --tables chat_log chat_session task_baseinfo abr_sms_task abr_call_task task_detail: 指定需要备份的表名列表,这里包括chat_logchat_sessiontask_baseinfoabr_sms_taskabr_call_tasktask_detail这六个表。

  • >: Linux shell重定向操作符,表示将命令的输出(即导出的SQL文件内容)重定向到一个文件。

  • abrbak_tables.sql: 导出的SQL文件名,备份数据将被保存到这个文件中,文件扩展名.sql表明它是一个SQL脚本文件。

综上所述,该命令的作用是从IP地址为xxx.xxx.x.xxx、端口为3307的MySQL服务器上,使用root用户和密码xxxxxx登录,并备份数据库abrbak中的指定表(chat_log, chat_session, task_baseinfo, abr_sms_task, abr_call_task, task_detail)到本地的abrbak_tables.sql文件中。


1.2 从容器内导出
# 先尝试用指定库的用户名导出指定库的数据
mysqldump -u xiaokkk -p xiaokkk > dump.sql

# 如果显示权限不足,用root用户进行导出
mysqldump -u root -p xiaokkk > dump.sql

特殊情况,如果root用户密码忘记了, 在/etc/my.cnf 中启用skip-grant-tables会禁用MySQL的权限系统,使得任何用户都能够无需密码即可连接数据库并拥有全部权限,【这会带来严重的安全风险。因此,仅在解决特定问题(如找回丢失的root密码)时临时使用】

修改配置文件后,需要重启MySQL服务使改动生效。重启命令根据系统和服务管理方式会有所不同,常见的命令有:

  • sudo systemctl restart mysql (Systemd系统)
  • sudo service mysql restart (Upstart或SysVinit系统)
  • brew services restart mysql (如果在macOS上通过Homebrew安装)

2、 数据导入

2.1 目标库准备

数据导入之前可能涉及删除目标库的表或者数据

# 直接删除表
select concat('drop table if exists ', table_name, ';')
from information_schema.tables
where table_schema = 'xiaokkk';

# 只删除数据
select concat('truncate table ', table_name, ';')
from information_schema.tables
where table_schema = 'xiaokkk';
2.2 执行导入
# 将备份文件复制到容器内部
docker cp /Users/xiaokkk/Desktop/abrbak_full_backup.sql fc20f2d2d321:/opt/abrbak_full_backup.sql

# 进入容器内部
docker exec -it fc20f2d2d321  /bin/bash

# 进入复制文件的目录
cd /opt
ls

# 确认文件复制成功后,需要固定在此目录,因为登录客户端后无法切换目录
mysql -u xiaokkk -p

# 查看有哪些库
show databases;

# 进入指定库
use xiaokkk

# 执行备份文件,执行前一定要看下文件use的哪个库,避免导致数据无法恢复
source abrbak_full_backup.sql


# 还有一种方式不用source
mysql -u xiaokkk -p xiaokkk < abrbak_full_backup.sql

3、注意事项

数据迁移是一个需要细心操作的工作,切不可大意,每次执行完对应操作后,需要确认无误后再进行下一步,主要注意事项如下:

1、注意迁移各项工作的顺序,建议如下:

  • 导出原容器数据库数据,如果需要变换库名,请务必更改前几个库名,涉及create database\use database等处的语句;
  • 上传到目标容器指定位置,一般为tmp或者opt;
  • 请务必停掉和目标数据库相关的数据调度,防止锁表或者导致生产事故;
  • 执行source,请务必确认已切换到指定库,防止更改了其他库数据;若为或者mysql - 的方式,请务必检查目标库参数,确认目标数据库库名正确;
  • 检查数据导入是否无误,结束

2、若原库和目标库的数据结构不一样,可以创建一个新库,将原库数据清洗至新库,然后将新库数据导入目标库

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值