记录以下在windows10系统上Podman v5.1.1安装MySQL8全过程。
目录
- 一、拉取mysql8镜像
- 二、创建宿主目录
- 三、创建 my.cnf文件
- 四、创建Mysql8容器
- 五、windows上Podman安装运行mysql8失败
- 问题描述
- 解决办法
- ① 通过PowerShell进入wsl
- ② 修改wsl系统配置
- ③ 重启wsl,Podman
- 六、记录错误日志
一、拉取mysql8镜像
首先通过Podman下载Mysql8镜像到本地。命令如下:
podman pull mysql:8
二、创建宿主目录
在windows系统磁盘上创建挂在所需的目录,我是在 D:\Program Files\podman-conf\mysql8 目录下分别创建了conf 、data 、logs三个文件夹。
三、创建 my.cnf文件
在conf目录下创建 my.cnf 文件,文件内容如下:
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
# basedir=/usr/local/mysql8
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql8/data
# 允许最大连接数
max_connections=1000
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=100
# 服务端使用的字符集默认为UTF8
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
authentication_policy=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服务端字符集
character_set_server = utf8mb4
# 设置默认存储引擎为InnoDB
default-storage-engine = InnoDB
# 默认为ON,设置为OFF,关闭事务自动提交
autocommit = OFF
transaction_isolation = READ-COMMITTED
# 错误日志存放路径
log_error = /usr/local/mysql8/log/log.err
# 全局动态变量,默认3,范围:1~3
# 表示错误日志记录的信息,1:只记录error信息;2:记录error和warnings信息;3:记录error、warnings和普通的notes信息
log_error_verbosity = 2
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8mb4
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
四、创建Mysql8容器
podman run -itd --name mysql8 -e TZ="Asia/Shanghai" -v "D:/Program Files/podman-conf/mysql8/conf/my.cnf":/etc/my.cnf -v "D:/Program Files/podman-conf/mysql8/data":/var/lib/mysql -v "D:/Program Files/podman-conf/mysql8/logs":/var/log/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8 --lower_case_table_names=1
正常到这一步就完成了MySQL的安装和运行。可以通过 podman ps 查看mysql 容器是否在运行。
以上是正确安装后的截图。
而我在安装时,出现了一个错误,困惑了我很久,具体问题如下。
五、windows上Podman安装运行mysql8失败
问题描述
上面第四步完成后,通过podman ps 命令查看运行的容器时,发现没有mysql,很奇怪呀。于是反复安装运行多次都是一样,后来查看了mysql日志发现了问题的根源在于,容器读取windows上的挂在文件目录时失败导致的。
解决办法
① 通过PowerShell进入wsl
② 修改wsl系统配置
添加 /etc/wsl.conf 文件中的配置。输入命令:
sudo vi /etc/wsl.conf
如果没有以下内容直接添加进去即可:
[automount]
enabled = true
options = "metadata"
mountFsTab = false
添加后查看文件内容如下图示:
③ 重启wsl,Podman
推出liunx系统后,停止 wsl ,重新启动podman。
wsl --shutdown
podman machine start
通过以上方式,重新安装mysql,运行mysql成功。
六、记录错误日志
2024-06-11 13:42:33+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.27-1debian10 started.
2024-06-11 13:42:33+08:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2024-06-11 13:42:33+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.27-1debian10 started.
2024-06-11 13:42:33+08:00 [Note] [Entrypoint]: Initializing database files
mysqld: [Warning] World-writable config file '/etc/my.cnf' is ignored.
2024-06-11T05:42:33.509612Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.27) initializing of server in progress as process 38
2024-06-11T05:42:33.518315Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-06-11T05:42:34.383870Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
mysqld: Cannot change permissions of the file 'ca.pem' (OS errno 1 - Operation not permitted)
2024-06-11T05:42:35.383035Z 0 [ERROR] [MY-010295] [Server] Could not set file permission for ca.pem
2024-06-11T05:42:35.383071Z 0 [ERROR] [MY-013236] [Server] The designated data directory /var/lib/mysql/ is unusable. You can remove all files that the server added to it.
2024-06-11T05:42:35.383257Z 0 [ERROR] [MY-010119] [Server] Aborting
2024-06-11T05:42:36.960729Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.27) MySQL Community Server - GPL.