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<
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
max_connections=3000
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
EOF
创建数据卷容器
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
查看数据已经被创建