我们编写代码或者部署环境的时候,离不开数据库的访问,那么如何快速的搭建一个MySQL数据库呢?下面的方法教会你。
MySQL5.7
- 创建目录(请根据自己的实际目录创建)
mkdir -p /2023/dockerdata/mysql/mysql5/{mydir,datadir,conf,source}
- 编写my.cnf
vim conf/my.cnf
[mysqld]
#default-storage-engine=INNODB
character-set-server=utf8mb4
collation-server = utf8mb4_general_ci
init_connect='SET NAMES utf8'
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
- 编写docker-compose.yaml
version: '3'
services:
mysql:
restart: always
image: mysql:5.7.18
container_name: mysql5.7
volumes:
- /2023/dockerdata/mysql/mysql5/datadir:/var/lib/mysql
- /2023/dockerdata/mysql/mysql5/conf/my.cnf:/etc/my.cnf
# 数据库还原目录 可将需要还原的sql文件放在这里,只对未初始化的数据库执行一次。
- /2023/dockerdata/mysql/mysql5/source:/docker-entrypoint-initdb.d
# 自定义一些目录
- /2023/dockerdata/mysql/mysql5/mydir:/mydir
environment:
- "MYSQL_ROOT_PASSWORD=testerzhang@testerzhang"
- "MYSQL_DATABASE=testerzhang"
- "TZ=Asia/Shanghai"
ports:
# 使用宿主机的3306端口映射到容器的3306端口
# 宿主机:容器
- 3306:3306
- 运行
docker-compose up -d
- 验证
$ mysql -h127.0.0.1 -P3306 -uroot -ptesterzhang@testerzhang
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| testerzhang |
+--------------------+
MySQL8
- 创建目录(请根据自己的实际目录创建)
mkdir -p /2023/dockerdata/mysql/mysql8/{mydir,datadir,conf,source}
- 编写my.cnf
vim conf/my.cnf
[mysqld]
#default-storage-engine=INNODB
character-set-server=utf8mb4
collation-server = utf8mb4_general_ci
init_connect='SET NAMES utf8'
default_authentication_plugin=caching_sha2_password
default-authentication-plugin=mysql_native_password
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
-
初始化sql-可选操作
假若你想初始化sql,比如创建用户sql
$ cat source/create_user.sql
CREATE USER 'test'@'%' IDENTIFIED BY 'testerzhang';
GRANT ALL PRIVILEGES ON test.* TO 'test'@'%' WITH GRANT OPTION;
flush privileges;
重要说明:
容器内/docker-entrypoint-initdb.d
目录下的文件会在数据库初始化时执行一次,只执行一次。所以如果mysql8/datadir
目录下有初始化过,必须删除掉,才会执行这个sql文件。
- 编写docker-compose.yaml
version: '3'
services:
mysql:
restart: always
image: mysql:8.0.31
container_name: mysql8.0
volumes:
- /2023/dockerdata/mysql/mysql8/datadir:/var/lib/mysql
- /2023/dockerdata/mysql/mysql8/conf/my.cnf:/etc/my.cnf
# 数据库还原目录 可将需要还原的sql文件放在这里,只对未初始化的数据库执行一次。
- /2023/dockerdata/mysql/mysql8/source:/docker-entrypoint-initdb.d
# 自定义一些目录
- /2023/dockerdata/mysql/mysql8/mydir:/mydir
environment:
- "MYSQL_ROOT_PASSWORD=testerzhang@testerzhang"
- "MYSQL_DATABASE=testerzhang"
- "TZ=Asia/Shanghai"
ports:
# 使用宿主机的3306端口映射到容器的3306端口
# 宿主机:容器
- 3306:3306
# 以下命令未测试,感兴趣的童鞋可以自行配置验证下。
#command:
# # 将mysql8.0默认密码策略 修改为 原先 策略 (mysql8.0对其默认策略做了更改 会导致密码无法匹配)
# --default-authentication-plugin=mysql_native_password
# --character-set-server=utf8mb4
# --collation-server=utf8mb4_general_ci
# --explicit_defaults_for_timestamp=true
# --lower_case_table_names=1
- 运行
docker-compose up -d
- 验证
$ mysql -h127.0.0.1 -P3306 -uroot -ptesterzhang@testerzhang
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| testerzhang |
+--------------------+
$ mysql -h127.0.0.1 -P3306 -utest -ptesterzhang
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.31 MySQL Community Server - GPL
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
本文没有授权给任何组织、企业和个人转载,未经作者允许禁止转载!
欢迎关注我的公众号testerzhang,原创技术文章第一时间推送。