services:
mysql-youlai:
hostname: mysql-youlai
image: mysql:8.0.25
networks:
- myitsite_dev_net
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=0
--max_allowed_packet=128M
# data 用来存放了数据库表文件,init存放初始化的脚本
volumes:
- ./volumes/mysql/data/:/var/lib/mysql/
- ./volumes/mysql/config/:/etc/mysql
- ./volumes/mysql/log/:/var/log/mysql/
- ./volumes/mysql/mysql-files:/var/lib/mysql-files
deploy:
placement:
constraints: [node.role == manager]
replicas: 1
restart_policy:
condition: on-failure
environment:
- TZ=Asia/Shanghai
- MYSQL_ROOT_PASSWORD=xxxx
- MYSQL_ROOT_HOST=%
ports:
- 3308:3306
这个是我的yaml文件,部署后mysql总是启动不起来,查看日志:
Can't open and lock privilege tables: Table 'mysql.user' doesn't exist
各种百度,说的是手动去解决问题,执行mysqld 指令等,对于docker启动的容器,容器都启动不起来。然后我换了一个volumes 宿主机的目录(原来:./volumes/mysql 新的:~/data/docker_file/mysql),使用docker-compose docker-swarm 执行后可以成功。我想应该是宿主机目录权限的问题,可是,我把volumes原来的目录权限设置为777, 依然不行,我只能在新的目录中执行成功后,把data相关的数据拷贝到原来的目录中。最后使用原来的目录执行,可以成功。
问题是解决,可是感觉没有根本性的解决问题,有没有大神们遇到这样的问题,给个解答,谢谢。