• mysql数据迁移


    背景:公司由于某种历史原因,导致数据库中新导入的数据与原有字符集不匹配,导入数据后,查询出现乱码,无法正常显示数据信息。

    解决方法:导出原有数据库的数据信息,修改字符集后重新导入回去。前提条件是目标字符集需要大于或者等于已有字符集,否则导入失败。

    操作过程如下:

    ===========================================

    mysql> show create database  HA;  #查询HA库创建时的默认字符集信息

    mysqldump -uroot -p  --default-character-set=latin1  -d HA > hatable.sql  #导出HA库的表结构,按照原有默认字符集导出,否则导出数据可能出错

    musqldump -uroot -p --defalult-character-set=latin1  --no-create-info  HA > hadata.sql  #导出HA库的数据,no-create-info表示不要create table语句

    使用sed命令或者vim编辑器将hatable.sql和hadata.sql中的latin1批量修改为uft8即可。

    mysql> create database new default charset utf8;  #创建新的数据库,用于数据导入

    mysql> create database  old  default character set latin1;

    myqldump -uroot -p  new < hatable.sql    #导入表结构

    mysqldump -uroot  -p  new < hadata.sql    #导入数据

    数据导出
    # 只导表结构
    echo 'SET FOREIGN_KEY_CHECKS=0;' > mdb_tables.sql;
    mysqldump -h127.0.0.1 -uuser -puser -d --add-drop-table=FALSE DBname >> mdb_tables.sql
    
    # 只导数据库存储过程和函数
    echo 'SET FOREIGN_KEY_CHECKS=0;' > mdb_cunchu.sql;
    mysqldump -h127.0.0.1 -uuser -puser -ntd -R  DBname >> mdb_cunchu.sql
    
    # 只导表数据
    echo 'SET FOREIGN_KEY_CHECKS=0;' > mdb_data.sql;
    mysqldump -h127.0.0.1 -uuser -puser --no-create-info  --complete-insert  --skip-tz-utc DBname >> mdb_data.sql

    注意:选择目标字符集时,要注意最好大于等于原字符集(字库更大),否则可能会丢失不被支持的数据

    mysql> show database new;

    mysql>use new;

    mysql>show tables;

    mysql>select * from tables;    #验证数据信息是否还是乱码,正常显示,则表示成功。

      

  • 相关阅读:
    nuxtjs项目安装依赖报错
    汇总资源
    nuxt.js
    关于Git每次进入都需要输入用户名和密码的问题解决
    Chrome
    44.树与树算法
    43.搜索
    41.栈
    42.排序
    39.协程
  • 原文地址:https://www.cnblogs.com/xiaofeng666/p/11747601.html
Copyright © 2020-2023  润新知