拉取镜像
MySQL 的docker镜像主要有两个版本:
官方版本:https://hub.docker.com/_/mysql
Oracle版本:https://hub.docker.com/r/mysql/mysql-server/
拉取 MySQL 镜像
docker pull mysql:5.7
配置挂载文件
创建文件夹
mkdir -p /usr/local/docker/mysql/confmkdir -p /usr/local/docker/mysql/data# 日志文件夹需要权限 777mkdir -p /usr/local/docker/mysql/logs
启动测试容器
docker run --name mysqltest -p 8888:3306 -e MYSQL_ROOT_PASSWORD=pwd123456 -d mysql:5.7
复制容器的MySQL 配置文件夹
docker cp mysqltest:/etc/mysql/conf.d/ /usr/local/docker/mysql/confdocker rm -f mysqltest
添加配置
cd /usr/local/docker/mysql/confvim my.cnf
my.cnf
[mysqld]# 服务器IDserver-id=1# 设置3306端口port=3306# 表名大小写不区分lower_case_table_names= 1# 开启慢查询slow_query_log = on# 设置慢查询日志路径#slow_query_log_file = /var/log/mysql/slow_query.log#log-error = /var/log/mysql/error.log# 设置慢查询时间阈值long_query_time = 2# 允许最大连接数max_connections=1024# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统max_connect_errors=100# 服务端使用的字符集默认为UTF8character-set-server=utf8mb4# 创建新表时将使用的默认存储引擎default-storage-engine=INNODB# 最大数据包max_allowed_packet=20M#设置日志格式binlog_format=Row#设置日志路径,注意路经需要mysql用户有权限写log-bin=mysql-bin#设置binlog清理时间expire_logs_days=7#binlog每个日志文件大小max_binlog_size=100m#binlog缓存大小binlog_cache_size=4m#最大binlog缓存大小max_binlog_cache_size=512msql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"[mysql]# 设置mysql客户端默认字符集default-character-set=utf8mb4[client]# 设置mysql客户端连接服务端时默认使用的端口port=3306default-character-set=utf8mb4
将my.cnf文件放在 /usr/local/docker/mysql/conf文件夹下
启动正式容器
docker run --privileged=true --restart=always \-p 3306:3306 --name mysql \-v /usr/local/docker/mysql/conf:/etc/mysql/conf.d \-v /usr/local/docker/mysql/logs:/var/log/mysql \-v /usr/local/docker/mysql/data:/var/lib/mysql \-e MYSQL_ROOT_PASSWORD=pwd123456 \--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci \-d mysql:5.7
参数说明
-p 3306:3306: 把容器内的3306端口映射到宿主机3306端口--privileged=true: 给容器加上特定权限 。否则会chown: changing ownership of ‘/var/lib/mysql/....‘: Permission denied-v /usr/local/docker/mysql/conf:/etc/mysql/conf.d配置-v /usr/local/docker/mysql/data:/var/lib/mysql:把mysql持久化的数据在宿主机内显示,做数据备份-e MYSQL_ROOT_PASSWORD=pwd123456: 指定数据库初始访问密码,第一次设置才有小,后面重启以修改的密码为准mysql:5.7mysql镜像名,后面没有tag后,下载最新的tag,latest
问题及解决
启动容器时,log日志报:Permission denied
错误信息
容器启动,通过日志发现如下错误
[ERROR] Could not open file '/var/log/mysql/error.log' for error logging: Permission denied
问题分析
mysql容器中,用mysql 用户来MySQL 服务的,而我们宿主机中没有mysql用户,所以导致容器没有权限创建对应的文件夹。
解决方法
chmod -R 777 /usr/local/docker/mysql/logs
账户密码
# 进入mysql容器docker exec -it mysql bash# 登录MySQLmysql -u root -ppwd123456# 修改密码alter USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test@123567pwd';# 添加远程登录用户CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'test@123pwd';GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';flush privileges;
