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;    #驗證數據信息是否還是亂碼,正常顯示,則表示成功。

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM