docker安装mysql

Updated on with 0 views and 0 comments

一、centos

1.1 拉取镜像

docker pull mysql:5.7.40

1.2 创建文件夹

sudo mkdir -p /opt/docker_data/mysql/5.7.40/{conf,data,log}
sudo chmod -R 755 /opt/docker_data/mysql/5.7.40

1.3 创建配置文件

vi /opt/docker_data/mysql/5.7.40/conf/custom.cnf

内容如下

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
# 字符集配置
init_connect="SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci"
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake

# 网络与解析
skip-name-resolve
explicit_defaults_for_timestamp=true

# 表名大小写
lower_case_table_names=1

# SQL模式(MySQL 5.7适用)
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

# InnoDB配置优化
innodb_buffer_pool_size = 128M
innodb_log_file_size = 64M
innodb_flush_log_at_trx_commit = 2

# 连接配置
max_connections = 200
wait_timeout = 600
interactive_timeout = 600

# 通用配置
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
bind-address = 0.0.0.0

1.4 运行容器

docker run --name mysql_5.7.40 \
  -v /opt/docker_data/mysql/5.7.40/log:/var/log/mysql \
  -v /opt/docker_data/mysql/5.7.40/data:/var/lib/mysql \
  -v /opt/docker_data/mysql/5.7.40/conf:/etc/mysql/conf.d \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -d mysql:5.7.40

二、windows

2.1 拉取镜像

docker pull mysql:8.0

2.2 创建文件夹

mkdir E:\docker_data\mysql\8\data
mkdir E:\docker_data\mysql\8\conf
mkdir E:\docker_data\mysql\8\logs

2.3 创建配置文件

E:\docker_data\mysql\8\conf\my.cnf文件中写入

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
default-authentication-plugin=mysql_native_password

2.4 运行容器

docker run -d --name mysql-8.0 -p 3306:3306 -v E:\docker_data\mysql\8.0\data:/var/lib/mysql -v E:\docker_data\mysql\8.0\config\my.cnf:/etc/mysql/my.cnf -v E:\docker_data\mysql\8.0\logs:/logs -e MYSQL_ROOT_PASSWORD=root mysql:8.0

三、使用容器默认的my.conf

在前面两章的操作中都是在宿主机建立好my.conf文件直接挂载到容器,这里选择启动容器,然后再去修改配置文件,防止自己定义的conf文件和容器内置的conf文件配置冲突导致无法启动容器

3.1 复制容器内的配置文件

这里要拿到容器内原始的配置,需要先创建一个容器,我还是选择挂载到data,config,logs三个目录下

docker run -d --name mysql-8.0 -p 33060:3306 -v D:\download\docker_data\mysql\8.0\data:/var/lib/mysql -v D:\download\docker_data\mysql\8.0\config:/etc/mysql/conf.d -v D:\download\docker_data\mysql\8.0\logs:/logs -e MYSQL_ROOT_PASSWORD=root mysql:8.0

此时可以看到目录下没有任何文件,此时我们把容器中的my.conf文件内容复制一份到宿主机中这里有两种方式,一种是直接在宿主机新建一个my.cnf文件,然后进入容器的/etc目录下,复制出my.cnf文件的内容到宿主机的my.cnf文件,还有一种就是使用docker cp命令把文件直接复制出来

docker cp mysql-8.0:/etc/my.cnf D:\download\docker_data\mysql\8.0\config\my.cnf

执行完这个命令,就能看到目录下多了一个cnf文件,内容大致如下,不同版本mys

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M

# Remove leading # to revert to previous value for default_authentication_plugin,
# this will increase compatibility with older clients. For background, see:
# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin
# default-authentication-plugin=mysql_native_password
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql

pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock

!includedir /etc/mysql/conf.d/

3.2 重新创建容器

配置文件最后明确指出了包含了/etc/mysql/conf.d/目录下的配置文件,这里我们就有了两种选择,可以直接在my.cnf中修改,也可以自己新建conf.d目录然后新建配置文件在重新挂载到容器,这里我还是选择放在conf.d目录下,尽量避免直接修改my.cnf

我们先删除之前创建的容器

docker rm -f mysql-8.0

然后再config目录下新增conf.d目录,然后再conf.d目录下新增custom.cnf

内容大致如下

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
default-authentication-plugin=mysql_native_password

log_error = /logs/mysql-error.log

# 慢查询日志
slow_query_log=1
slow_query_log_file=/logs/mysql-slow.log
long_query_time=2

此时重新创建容器,挂载my.cnf和conf.d目下的custom.cnf命令如下

docker run -d --name mysql-8.0 -p 33060:3306 -v D:\download\docker_data\mysql\8.0\data:/var/lib/mysql -v D:\download\docker_data\mysql\8.0\config\conf.d:/etc/mysql/conf.d -v D:\download\docker_data\mysql\8.0\config\my.cnf:/etc/my.cnf -v D:\download\docker_data\mysql\8.0\logs:/logs -e MYSQL_ROOT_PASSWORD=root mysql:8.0

四、登录权限配置

安装完成后直接登录会提示错误

image.png

先进入容器

docker exec -it mysql_5.7.40 /bin/bash

连接mysql

mysql -u root -p

查询当前用户

SELECT user, host FROM mysql.user WHERE user = 'root';

结果如下

image.png

这里如果没有user=root和host=%的用户,则运行如下命令

CREATE USER 'root'@'%' IDENTIFIED BY '你的密码';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

如果有的话直接执行

GRANT ALL PRIVILEGES ON . TO 'root'@'%' WITH GRANT OPTION;

再刷新一下权限即可

FLUSH PRIVILEGES;

标题:docker安装mysql
作者:wenyl
地址:http://www.wenyoulong.com/articles/2020/05/14/1589444938088.html