在宿主机创建以下的文件夹,用作运行mysql镜像时和镜像之间建立映射 mkdir -p /opt/docker-mysql/confmkdir -p /opt/docker-mysql/datamkdir -p /opt/docker-mysql/logs执行以下命令,将镜像运行起来。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将第一步生成的esb_console_db_dev.sql上传到宿主机/apps/Download目录下,然后通过指令docer cp /apps/Download/esb_console_db_dev.sql mysql镜像ID:/home将导出的sql脚本复制到容器内部的/home目录下执行命令docker exec -it mysql镜像ID /bin/bash进入容器内部执行命令mysql -u root -p连接上mysql创建同名的数据库create database esb_console_db_dev; 切换数据库use esb_console_db_dev; 执行命令开始导入source /home/esb_console_db_dev.sql; 至此,数据库的迁移就完成了但是事情肯定没有那么顺利,因为在使用的时候发现,导入到容器中的数据中文存在乱码。

问题解决方案

中文乱码问题

中文乱码十有八九是字符集出了问题,我们进入到容器内部,连接上mysql后,执行命令show variables like "%char%";来查看数据库当前的字符集。如图所示:

docker mysql 容器导出数据表 docker mysql 数据迁移_mysql


那么下面开始设置字符集。

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. 然后重新导入下就可以了。