記一次docker mysql 數據庫遷移過程

mysql數據遷移

環境說明

  • 源數據庫
    一個在linux服務器上運行的5.6版本的Mysql
  • 目標數據庫
    一個在docker上運行的Mysql 5.7鏡像

遷移過程

導出源數據

這裏就需要引用的mysql官方的一個工具mysqldump,關於這個工具的詳細使用可以自行百度,無非就是一些參數的配置。這裏列出幾個常用的配置

參數 含義 備註
-h 指定服務器IP地址 本機的時候可以省略
-P 指定服務器端口 本機的時候可以省略
-u 用戶名
-p 密碼
–ignore-table 導出時候排除的表 用法可以參見下面的實例
-default-character-set 指定導出時用的字符集 用法可以參見下面的實例

由於數據庫中的ESB_INSTANCE和ESB_INSTANCE_DETAIL中存在大量的大字段信息,並且只是一些日誌數據,可以不用遷移過去,否則導出的文件會很大。導出語句如下:

./mysqldump -u root -p esb_console_db_dev > /home/mysql/esb_console_db_dev.sql --ignore-table=esb_console_db_dev.ESB_INSTANCE --ignore-table=esb_console_db_dev.ESB_INSTANCE_DETAIL --default-character-set=utf8

如果不知道mysql裝在哪個目錄下,執行指令ps -ef | grep mysql,就可以看到mysql的安裝目錄了

將數據導入到目標數據庫

  1. 首先使用docker拉取一個mysql的鏡像。關於docker指令的介紹可以參見之前的文章------Docker入門—docker常用操作指令及運行第一個容器。(PS:由於小編實際操作的時候,虛擬機上已有一個5.7版本的實例,就沒有再去拉取一個5.6版本的鏡像,同時也是想試試兩個不同版本之間遷移的時候會不會遇到什麼問題。)
  2. 在宿主機創建以下的文件夾,用作運行mysql鏡像時和鏡像之間建立映射
    • mkdir -p /opt/docker-mysql/conf
    • mkdir -p /opt/docker-mysql/data
    • mkdir -p /opt/docker-mysql/logs
  3. 執行以下命令,將鏡像運行起來。
    docker run  --name mysql  -p 3306:3306 -v /opt/docker-mysql/conf:/etc/mysql/mysql.conf.d/  -v /opt/docker-mysql/data:/var/lib/mysql  -v /opt/docker-mysql/logs:/logs  -e MYSQL_ROOT_PASSWORD=AAaa1234 -d mysql:5.7 
    
  4. 將第一步生成的esb_console_db_dev.sql上傳到宿主機/apps/Download目錄下,然後通過指令docer cp /apps/Download/esb_console_db_dev.sql mysql鏡像ID:/home將導出的sql腳本複製到容器內部的/home目錄下
  5. 執行命令docker exec -it mysql鏡像ID /bin/bash進入容器內部
  6. 執行命令mysql -u root -p連接上mysql
  7. 創建同名的數據庫create database esb_console_db_dev;
  8. 切換數據庫use esb_console_db_dev;
  9. 執行命令開始導入source /home/esb_console_db_dev.sql;
  10. 至此,數據庫的遷移就完成了

但是事情肯定沒有那麼順利,因爲在使用的時候發現,導入到容器中的數據中文存在亂碼。

問題解決方案

中文亂碼問題

中文亂碼十有八九是字符集出了問題,我們進入到容器內部,連接上mysql後,執行命令show variables like "%char%";來查看數據庫當前的字符集。如圖所示:修改字符集前描述
那麼下面開始設置字符集。
1.在宿主機中的/opt/docker-mysql/conf目錄下新增文件mysq.cnf,並添加以下內容:

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake

  1. 保存之後,重啓mysql鏡像,重新查看下字符集,就可以看到字符集已經更正過來了,如下圖所示:修字符集後
  2. 然後重新導入下就可以了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章