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;    #验证数据信息是否还是乱码,正常显示,则表示成功。

      

  • 相关阅读:
    解决线程不能访问用户界面组件的问题
    Oracle使用手册(三)存储过程与触发器
    VC中的字符串操作
    Windows 窗体多线程
    VC中的指针操作
    读写独立存储库
    10个不用保养品的美容护肤法 生活至上,美容至尚!
    吃出来的美白方法 生活至上,美容至尚!
    八大梦境提醒的你疾病所在 生活至上,美容至尚!
    31条!最致命的生活小细节 生活至上,美容至尚!
  • 原文地址:https://www.cnblogs.com/xiaofeng666/p/11747601.html
Copyright © 2011-2022 走看看