2019独角兽企业重金招聘Python工程师标准>>>
docker mysql8.0使用方法(同样适用于5.7版本)
拉去mysql最新8.0镜像 docker pull mysql 创建持久化目录 mkdir -p /app/data/mysql/{conf,db,mysql_init_data} #mysql_init_data为初始化数据目录。导入sql在启动容器时会自动执行。 设置my.cnf配置文件 #default_authentication_plugin=mysql_native_password 设置mysql密码认证方式-解决远程连接问题 #mmysql8 之前的版本中加密规则是mysql_native_password,mysql8之,加密规则是caching_sha2_password,而现在大多数客户端只支持mysql_native_password认证方式。所以还原认证为mysql_native_password即可解决。 cat >/app/data/mysql/conf/my.cnf<创建数据卷容器 docker run -v=/app/data/mysql/conf/my.cnf:/etc/my.cnf -v=/app/data/mysql/db:/var/lib/mysql --name web_data centos #docker run -p 3306:3306 -v=/app/data/mysql/conf/my.cnf:/etc/my.cnf -v=/app/data/mysql/db:/var/lib/mysql --restart always --privileged=true --name mysql-test -e MYSQL_USER="wyl" -e MYSQL_PASSWORD="wylpwd123456" -e MYSQL_ROOT_PASSWORD="rootpwd123456" mysql 启动容器: docker run -d -p 3306:3306 -d --volumes-from web_data --restart always --privileged=true --name mysql-test -e MYSQL_USER="wyl" -e MYSQL_PASSWORD="wylpwd123456" -e MYSQL_ROOT_PASSWORD="rootpwd123456" mysql #同样适用于mysql5.7 #docker run -d -p 3306:3306 --volumes-from web_data --restart always --privileged=true --name mysql-test -e MYSQL_USER="wyl" -e MYSQL_PASSWORD="wylpwd123456" -e MYSQL_ROOT_PASSWORD="rootpwd123456" mysql:5.7.17 本地连接测: mysql -uroot -prootpwd123456 -h127.0.0.1 参数说明: -e MYSQL_USER="wyl":添加用户 -e MYSQL_PASSWORD="wylpwd123":设置普通用户密码 -e MYSQL_ROOT_PASSWORD=”rootpwd123”:设置root的密码 –character-set-server=utf8:设置字符集为utf8 –collation-server=utf8_general_ci:设置字符比较规则为utf8_general_ci –restart always:开机启动 –privileged=true:提升容器内权限 -v=/mysqltest/config/my.cnf:/etc/my.cnf:映射配置文件 -v=/mysqltest/data:/var/lib/mysql:映射数据目录
启动容器自动执行sql-记录
mysql官方dockerfile中的entrypoint.sh脚本已经实现了此功能。
dockerfile:https://github.com/docker-library/mysql/blob/master/5.7/Dockerfile
docker-entrypoint.sh:https://github.com/docker-library/mysql/blob/master/5.7/docker-entrypoint.sh
entrypoint.sh脚本命令会遍历/docker-entrypoint-initdb.d/文件中的sh文件,sql文件,sql.gz压缩包,随后按照sh>sql>sql.gz的顺序依次执行。当有多个sql文件时,sql执行顺序问题可以通过shell脚本控制实现,这里不再赘述。
也就是说实现以上功能需要我们本地创建:初始化sql目录,将我们需要初始化的sql移动到该目录下并在创建容器时挂在此目录到/docker-entrypoint-initdb.d/下即可。实现创建容器自动执行sql的目的。
创建初始化数据目录 mkdir -p /app/data/mysql/mysql_init_data 创建初始化表 cat /app/data/mysql/mysql_init_data/init.sql #创建数据库 DROP database IF EXISTS `wyl_database`; create database `wyl_database` default character set utf8 collate utf8_general_ci; #切换到test_data数据库 use wyl_database; #创建建表 DROP TABLE IF EXISTS `person`; CREATE TABLE `user` ( `id` bigint(20) NOT NULL, `name` varchar(255) DEFAULT NULL, `age` bigint(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; #插入数据插 INSERT INTO `user` (`id`,`name`,`age` ) VALUES (0,'wangyunlong',18);
创建容器数据卷
docker run -v=/app/data/mysql/conf/my.cnf:/etc/my.cnf -v=/app/data/mysql/db:/var/lib/mysql --name web_data centos
启动mysql容器
docker run -d -p 3306:3306 --volumes-from web_data -v /app/data/mysql/mysql_init_data:/docker-entrypoint-initdb.d --restart always --privileged=true --name mysql-test -e MYSQL_USER="wyl" -e MYSQL_PASSWORD="wylpwd123456" -e MYSQL_ROOT_PASSWORD="rootpwd123456" mysql:5.7.17
查看数据已经被创建