说明
mysql这种有状态服务不建议使用容器化工具安装。
-
性能问题:由于Docker容器是一个虚拟化环境,因此需要在宿主机和容器之间进行网络通信。这种额外的通信开销可能会导致数据库性能下降,尤其是在高负载的情况下。
-
可靠性问题:Docker容器是短暂的,当容器停止或重启时,数据可能会丢失。在MySQL中,数据的可靠性对于生产环境非常重要。
-
安全问题:默认情况下,Docker容器中的数据不是持久化的,因此可能会存在数据泄露的风险。此外,如果Docker容器没有进行足够的安全配置,那么容器中的数据和应用程序可能会受到攻击。
这里是为了学习方便,简化安装过程以及可能遇到的问题,重点放到mysql相关内容的学习。
docker安装mysql
- 准备data和log目录
mkdir -p /home/mysql/{data,logs,conf}
- 准备my.cnf
vi /home/mysql/conf/my.cnf
[mysqld]
# 日志文件路径
#log-error=/var/log/mysql/error.log
# MySQL服务器进程的PID文件路径
#pid-file=/var/run/mysqld/mysqld.pid
# socket 文件所在目录
#socket=/var/run/mysql/mysql.sock
# 指定 MySQL 数据存放的绝对路径
datadir = /var/lib/mysql
# 端口号
port=3306
# 默认serverid,唯一
server-id = 1
# 数据库连接池
max_connections=1000
# 数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用 4 个字节)
character-set-server = utf8mb4
# 数据库字符集对应一些排序等规则,注意要和 character-set-server 对应
collation-server = utf8mb4_general_ci
# 设置 client 连接 mysql 时的字符集,防止乱码
init_connect='SET NAMES utf8mb4'
# 表示表名不区分大小写,同时数据库在比对表名时,也不区分大小写,并且在所有操作系统下都不区分大小写
lower_case_table_names = 1
# 用于指定索引缓冲区的大小
key_buffer_size=16M
# 设置一次消息传输的最大值
max_allowed_packet=8M
-
启动master
docker run -d \ -p 3306:3306 \ --name=mysql-master \ -v /home/mysql/conf:/etc/mysql/conf.d \ -v /home/mysql/logs:/logs \ -v /home/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql:5.7
- 第一次安装可能会慢,需要下镜像
-
验证
docker exec -it mysql-master mysql /bin/bash
mysql -uroot -p