MySQL之mysqldump单库迁移生产案例

  • 需求:MySQL 5.6通过mysqldump迁移到MySQL 8.0.x生产方案
  • mysqldump迁移适用小库

1、检查系统字符集

echo $LANG

2、检查数据库字符集

 show variables like '%char%';
 mysql> show variables like '%char%';
+--------------------------+----------------------------------------------------------------+
| Variable_name            | Value                                                          |
+--------------------------+----------------------------------------------------------------+
| character_set_client     | latin1      # 系统级别                                         |
| character_set_connection | latin1                                                         |
| character_set_database   | latin1      # 数据库级别                                       |
| character_set_filesystem | binary                                                         |
| character_set_results    | latin1                                                         |
| character_set_server     | latin1                                                         |
| character_set_system     | utf8                                                           |
| character_sets_dir       | /mysql/app/mysql-5.6.51-linux-glibc2.12-x86_64/share/charsets/ |
+--------------------------+----------------------------------------------------------------+

3、检查数据库创建默认字符集

 show create database db_name;                 -- 查看数据库的字符集

 select count(*) ct,CHARACTER_SET_NAME from COLUMNS where TABLE_SCHEMA = 'db_name' group by 2;

4、查看数据下面的表字符集

  select count(*) ct,TABLE_COLLATION from tables where TABLE_SCHEMA like 'db_name' group by 2;

  use db_name;

  show create table xxx;

5、如果当前系统字符集与数据库级别不一致

export LANG=latin1       # 临时设置,当前窗口有效,设置与(show variables like character_set_database';)一致

 echo $LANG

6、导出数据,mysqldump默认导出字符集在各个版本是存在差异的。
# mysql 5.6:mysqldump默认字符集utf8
# mysql 5.7:mysqldump默认字符集utf8
# mysql 8.x:mysqldump默认字符集utf8mb4

  • # mysqldump参数:

    # -R :Dump functions and procedures
    # -E :Dump events
    # --default-character-set :指定导出字符集
    # --single-transaction :锁相关
    # --flush-logs :刷日志
    # --databases :指定数据库,导出某个数据库
    

1) 导出前,旧机器设置为只读

  set global read_only = on;

2) 导出数据

/mysql/app/mysql6/bin/mysqldump -uroot -prootroot -P3306 -h127.0.0.1 \
-R -E --default-character-set=latin1 \
--single-transaction \
--flush-logs  \
--databases db_name> /backup/db_name_$(date +%F).sql

7、把/backup/db_name_$(date +%F).sql传到异机相同目录

  scp /backup/db_name_$(date +%F).sql mysql@IP:/backup/db_name_$(date +%F).sql

8、恢复

  • # 按上面步骤,检查字符集:系统字符集、数据库创建字符集一致后,再执行导入

1) 检查

   show variables like '%char%';                 -- 检查数据库默认启动字符集
   show create database db_name;                 -- 查看数据库的字符集

  •    # 如果创建数据字符不一致,需重新创建
   # drop database db_name;
   # create database db_name 
   # CREATE DATABASE db_name DEFAULT CHARACTER SET latin1;


2) 异机导入
# -o :指定数据名恢复

mysql -uroot -proot -p -o db_name < /backup/db_name_$(date +%F).sql


9、检查
1) 检查数据库创建默认字符集

 show create database db_name;                 -- 查看数据库的字符集

 select count(*) ct,CHARACTER_SET_NAME from COLUMNS where TABLE_SCHEMA = 'db_name' group by 2;

2) 查看数据下面的表字符集

 select count(*) ct,TABLE_COLLATION from tables where TABLE_SCHEMA like 'db_name' group by 2;

  use db_name;

  show create table xxx;

3) 检查表数据
 

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

の正在缓存99%

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

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

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

打赏作者

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

抵扣说明:

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

余额充值