Docker部署mysql

部署mysql 5.6

创建配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mkdir -p /data/mysql/{data,etc}

cat > data/mysql/etc/my.cnf << EOF
[mysqld]
lower_case_table_names=1
basedir=/usr/
datadir=/var/lib/mysql/
socket=/tmp/mysql.sock
character_set_server=utf8mb4
collation_server=utf8mb4_general_ci
sql_mode=ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

[mysql]
default-character-set=utf8mb4
EOF

创建mysql容器

1
2
3
4
5
6
7
8
9
10
docker run -d --name mysql \
--privileged=true \
-e MYSQL_ROOT_PASSWORD=root \
-e MYSQL_DATABASE=maisi_db \
-e MYSQL_USER=maisi \
-e MYSQL_PASSWORD=123456789 \
-p 3306:3306 \
-v /data/mysql/etc/my.cnf:/etc/my.cnf \
-v /data/mysql/data:/var/lib/mysql \
maisi/mysql:5.7
  • 生产环境必须设置复杂的root密码(环境变量MYSQL_ROOT_PASSWORD的值)。

测试登录

1
docker exec -it mysql mysql -u root -p

查看配置信息

1
show variables like '%character%';

部署mysql 8.0

创建配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
mkdir -p /data/mysql/{data,etc}

cat > /data/mysql/etc/my.cnf << EOF
[mysql]
default-character-set=utf8mb4

[mysqld]
lower_case_table_names=1
basedir=/usr/
datadir=/var/lib/mysql/
socket=/tmp/mysql.sock
default_authentication_plugin=mysql_native_password
EOF

创建mysql容器

1
2
3
4
5
6
docker run -d --name mysql \
-e MYSQL_ROOT_PASSWORD=root \
-p 3306:3306 \
-v /data/mysql/etc/my.cnf:/etc/my.cnf \
-v /data/mysql/data:/var/lib/mysql \
maisi/mysql:8.0

查看mysql版本

1
docker exec -it mysql mysql --version

返回:

1
mysql  Ver 8.0.42 for Linux on x86_64 (MySQL Community Server - GPL)

或者通过sql查询:

1
docker exec -it mysql mysql -uroot -p -e "select version();"

返回:

1
2
3
4
5
+-----------+
| version() |
+-----------+
| 8.0.42 |
+-----------+