Docker 安装Mysql 配置 lower_case_table_names 不生效问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker 安装Mysql 配置 lower_case_table_names 不生效问题相关的知识,希望对你有一定的参考价值。
参考技术A重启mysql
show global variables like \'%lower_case%\';
没有生效! 且查了很多文章都是来回拷贝,无有用信息
将参数配置在docker run 中有效
注意/说明
1.对于已经在运行的mysql docker,没有办法, 备份数据库 再docker run 一个
2.lower_case_table_names 在 docker run 参数中变成了:lower-case-table-names
3.可能类似的参数都需要这种方式才能成功
4.本次问题主要是为了运行开源代码,并不是推荐使用mysql 的"忽略大小写"
Docker安装和配置MySQL
前言
MySQL 是世界上最受欢迎的开源数据库,So~本文将演示如何在Docker上安装并且配置MySQL。
环境
- CentOS 7
- Docker 20.10.10
安装
拉取镜像
docker pull mysql
如果要指定版本,在mysql后面加上:
+版本号
,例如:
docker pull mysql:8.0.16
这里直接拉取最新版MySQL
查看镜像
docker images
创建并启动MySQL容器
创建数据目录和配置文件
提前在宿主机创建好放置mysql的配置文件的目录和数据目录,并且进行授予权限,避免挂载外部配置和数据时启动失败:
创建放置mysql的配置文件的目录和数据目录
mkdir -p /mydata/mysql/
设置文件夹权限
chmod -R 755 /mydata/mysql
第一个数字表示文件所有者的权限 第二个数字表示与文件所有者同属一个用户组的其他用户的权限 第三个数字表示其它用户组的权限。
权限分为三种:读(r=4),写(w=2),执行(x=1) 。
综合起来还有可读可执行(rx=5=4+1)、可读可写(rw=6=4+2)、可读可写可执行(rwx=7=4+2+1)。 所以,chmod
755 设置用户的权限为:
1.文件所有者可读可写可执行 --7
2.与文件所有者同属一个用户组的其他用户可读可执行 --5
3.其它用户组可读可执行
创建my.cnf配置文件
mkdir -p /mydata/mysql/conf
touch /mydata/mysql/conf/my.cnf
编辑my.cnf配置文件
vi /mydata/mysql/conf/my.cnf
添加以下配置内容
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
secure_file_priv=/var/lib/mysql
提醒
无论你是否使用我的配置,如果你的安装的是新版MySQL,务必要复制这一句:
secure_file_priv=/var/lib/mysql
第一次创建启动MySQL容器的时候,MySQL会访问/var/lib/mysql
文件夹,如果没有权限就会导致无法启动,使用docker ps之后看不到mysql容器在运行,需要设置secure_file_priv
的值指定为/var/lib/mysql
,这样就有权限正常访问和读写/var/lib/mysql目录
Failed to access directory for --secure-file-priv. Please make sure that directory exists and is accessible by MySQL Server. Suppliedvalue : /var/lib/mysql-files
译文:无法访问–secure-file-priv的目录。请确保该目录存在并且可由MySQL服务器访问。提供的值:/var/lib/mysql文件
- secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出
- secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下
- secure_file_priv的值为空,表示不对mysqld 的导入|导出做限制
创建并启动MySQL容器命令
sudo docker run -p 3306:3306 --name mysql \\
-v /mydata/mysql/log:/var/log/mysql \\
-v /mydata/mysql/data:/var/lib/mysql \\
-v /mydata/mysql/conf:/etc/mysql \\
-e MYSQL_ROOT_PASSWORD=root \\
-d mysql:latest
参数说明:
-p 3306:3306
:将容器的3306端口映射到主机的3306端口--name mysql
:定义容器名称为mysql-v /mydata/mysql/log:/var/log/mysql
:将MySQL的日志文件夹挂载到主机-v /mydata/mysql/data:/var/lib/mysql
:将MySQL的数据文件夹挂载到主机-v /mydata/mysql/conf:/etc/mysql
:将MySQL的配置文件夹挂载到主机-e MYSQL_ROOT_PASSWORD=root
:初始化root用户密码-d mysql:latest
:选择MySQL版本为latest的镜像构建容器
查看正在运行的容器
docker ps
进入到MySQL容器内部进行配置
进入命令
docker exec -it 容器id ./bin/bash
连接MySQL
这里因为我们自己设置的MySQL
默认密码为root
所以p
后面为root
mysql -uroot -proot
更改MySQL密码
使用mysql库
use mysql
修改访问主机以及密码等,设置为所有主机可访问
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
注意:mysql_native_password,mysql8.x版本必须使用这种模式,否则navicate无法正确连接
测试连接
测试前请保证关闭了防火墙,如果是云服务器记得开放3306规则
Linux关闭防火墙
# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld
云服务开放3306端口
使用Navicat测试连接
使用SQLyog测试连接
Docker安装和配置MySQL教程结束!
以上是关于Docker 安装Mysql 配置 lower_case_table_names 不生效问题的主要内容,如果未能解决你的问题,请参考以下文章