1. Docker安装

2. 在服务器本地创建MySQL配置文件,基本配置如下,如放在文件/root/mysql/conf/my.cnf中

[mysqld]
# 设置3306端口
port=3306
# mysql pid记录文件
pid-file = /var/run/mysqld/mysqld.pid
# socket配置
socket = /var/run/mysqld/mysqld.sock
# 设置mysql数据库的数据的存放目录
datadir=/var/lib/mysql
# 允许最大连接数 
max_connections=1000 
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统 
max_connect_errors=100 
# 服务端使用的字符集默认为UTF8 
character-set-server=utf8mb4 
# 创建新表时将使用的默认存储引擎 
default-storage-engine=INNODB 
# 默认使用“mysql_native_password”插件认证 
default_authentication_plugin=mysql_native_password 
# 是否对sql语句大小写敏感,1表示不敏感 
lower_case_table_names = 1 
#MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭 
#MySQL默认的wait_timeout 值为8个小时, interactive_timeout参数需要同时配置才能生效 
interactive_timeout = 1800 
wait_timeout = 1800 
#Metadata Lock最大时长(秒), 一般用于控制 alter操作的最大时长sine mysql5.6 
#执行 DML操作时除了增加innodb事务锁外还增加Metadata Lock,其他alter(DDL)session将阻塞 
lock_wait_timeout = 3600 
#内部内存临时表的最大值。 
#比如大数据量的group by ,order by时可能用到临时表, 
#超过了这个值将写入磁盘,系统IO压力增大 
tmp_table_size = 64M 
max_heap_table_size = 64M 
[mysql] 
# 设置mysql客户端默认字符集 
default-character-set=utf8mb4 
[client] 
# 设置mysql客户端连接服务端时默认使用的端口 
port=3306 
default-character-set=utf8mb4

[mysqld_safe]
log_error=/var/log/mysqld.log
pid_file=/var/run/mysqld/mysqld.pid

3. docker命令启动MySQL镜像,如果docker服务没启动,可以使用service docker start命令启动。注意使用--privileged=true配置,让docker有权限操作物理机文件

docker run --name mysql -p 3306:3306 --privileged=true -v /root/mysql/conf:/etc/mysql/conf.d -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0

4. 使用命令docker logs mysql查看启动日志,发现有提醒:mysqld: [Warning] World-writable config file '/etc/mysql/conf.d/my.cnf' is ignored.这是因为本地的配置文件权限太大,对所有用户都生效了,所以mysql为了安全,就忽略不使用了。需要对本地my.cnf文件权限降级:chmod 644 mysql/conf/my.cnf

5. 进入Mysql docker内部

docker exec -it mysql /bin/bash

6. 启动Mysql客户端,连接Mysql。show databases;命令可以列出数据库

mysql -uroot -proot

 7. 重启MySQL服务方式就是重启镜像容器,docker restart mysql