zoukankan      html  css  js  c++  java
  • 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;    #验证数据信息是否还是乱码,正常显示,则表示成功。

      

  • 相关阅读:
    有关android UI 线程
    lang3日期工具类底层源码解析
    JSON业务模型拆解技巧
    math3底层源码解决多元方程组
    关于日期解析Scala语言
    maven仓库支持cdh版本配置
    kudu数据库个人简单的总结
    json数据入库kafka
    json数据写入hbase
    一只鸟的故事
  • 原文地址:https://www.cnblogs.com/xiaofeng666/p/11747601.html
Copyright © 2011-2022 走看看