#1024步调员节 | 征文#
在docker中的MySQL容器,怎么让他不区分数据库巨细写,数据库巨细写不敏感
媒介
假如你的是docker的MySQL容器,在启动运行容器时,没有指定。
唯一的办理办法,就是重新运行一个新的容器。
当前既然有唯一,也有唯二,不过,这个办理办法,就不建议了,由于容器重新启动就失效了。
在此之前,你可以先查询你的lower_case_table_names 的值是什么?
查询lower_case_table_names 的值
- SHOW VARIABLES LIKE 'lower_case_table_names';
复制代码
- 查询数据库是否支持巨细写
- lower_case_table_names 被设置为 1,即表名不区分巨细写。
- 假如值为 1,则表示表名和列名在 MySQL 中不区分巨细写。
- 假如值为 0 或 2,则表示表名和列名在 MySQL 中区分巨细写。
查询版本mysql的版本信息
更详细查看版本的方法请看文章:
我docker拉取mysql镜像时用的是latest,我该怎么看我的镜像版本是多少?可以通过一下三种方法查看
docker里的mysql容器,默认的日记文件和数据库文件放在什么位置
请看文章:docker里的mysql容器,默认的日记文件和数据库文件放在什么位置?并且可以通过sql命令查看
(唯二办法1)设置全局变量-直接使用命令设置不区分巨细写
强制执行
- SET GLOBAL lower_case_table_names=1;
复制代码 会提示提示
- SET GLOBAL lower_case_table_names=1
- > 1238 - Variable 'lower_case_table_names' is a read only variable
复制代码
- 在 MySQL 中,lower_case_table_names 是一个全局变量,但它在运行时是只读的,因此不能通过 SET GLOBAL 命令动态更改。这个变量需要在 MySQL 服务启动时设置,通常是在 MySQL 的设置文件中设置。
- 假如你正在使用 MySQL 5.7 或更高版本,并且希望在 Docker 容器中设置 lower_case_table_names,最好的方法仍旧是通过设置文件来实现。
(唯二办法2)设置数据字典的 lower_case_table_names
设置数据字典的 lower_case_table_names: 你可以通过 SQL 命令来设置数据字典的 lower_case_table_names:
- SET @@global.lower_case_table_names = 1;
复制代码 但是请注意,这个设置在 MySQL 服务重启后会规复为默认值。
1.直接安装的MySQL数据库,不区分巨细写办理办法
MySQL 的设置文件my.cnf 或my.ini来设置,lower_case_table_names 的值为1
- [mysqld]
- lower_case_table_names=1
复制代码 查询lower_case_table_names 的值
- SHOW VARIABLES LIKE 'lower_case_table_names';
复制代码
- 查询数据库是否支持巨细写
- lower_case_table_names 被设置为 1,即表名不区分巨细写。
- 假如值为 1,则表示表名和列名在 MySQL 中不区分巨细写。
- 假如值为 0 或 2,则表示表名和列名在 MySQL 中区分巨细写。
my.cnf 或my.ini在什么位置
我是在根目录下,我的系统是windows10;
截图如下:
my.ini内容如下
- [mysql]
- default-character-set=utf8
- [mysqld]
- port=3306
- basedir=D:/CodeTools/phpstudy_pro/Extensions/MySQL5.7.26/
- datadir=D:/CodeTools/phpstudy_pro/Extensions/MySQL5.7.26/data/
- character-set-server=utf8
- default-storage-engine=MyIsam
- max_connections=100
- collation-server=utf8_unicode_ci
- init_connect='SET NAMES utf8'
- innodb_buffer_pool_size=64M
- innodb_flush_log_at_trx_commit=1
- innodb_lock_wait_timeout=120
- innodb_log_buffer_size=4M
- innodb_log_file_size=256M
- interactive_timeout=120
- join_buffer_size=2M
- key_buffer_size=32M
- log_error_verbosity=1
- max_allowed_packet=16M
- max_heap_table_size=64M
- myisam_max_sort_file_size=64G
- myisam_sort_buffer_size=32M
- read_buffer_size=512kb
- read_rnd_buffer_size=4M
- server_id=1
- skip-external-locking=on
- sort_buffer_size=256kb
- table_open_cache=256
- thread_cache_size=16
- tmp_table_size=64M
- wait_timeout=120
- [client]
- port=3306
- default-character-set=utf8
复制代码 2.宝塔的mysql数据库的 my.cnf 或my.ini在什么位置
MySQL的设置文件通常位于/etc/my.cnf或者/etc/mysql/my.cnf中。
你也可以通过命令搜刮
我在测试中它的位置是:/etc/my.cnf
3.docker的mysql容器的 my.cnf 或my.ini在什么位置
位置:/etc/mysql/my.cnf
- 在 MySQL 容器内部,默认的设置文件位置如下:
- 主设置文件通常位于 /etc/mysql/my.cnf。
- 可以放置额外的设置文件在 /etc/mysql/conf.d/ 目录下。
- 通过将你的设置文件挂载到 /etc/mysql/conf.d/ 目录,你可以轻松地覆盖默认的设置。
4.docker的mysql容器
4.1 镜像启动容器,使用环境变量,让数据库不区分巨细写
运行命令
- docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_LOWER_CASE_TABLE_NAMES=1 -d mysql:5.7
复制代码
- some-mysql是容器名称
- -e MYSQL_LOWER_CASE_TABLE_NAMES=1 设置了 MySQL 表名不区分巨细写
- -e MYSQL_ROOT_PASSWORD=my-secret-pw 设置了暗码是my-secret-pw
- -d 是后台运行
- mysql:5.7是容器名称和版本
需要注意
- 需要注意的是,从 MySQL 5.7 开始,环境变量 MYSQL_LOWER_CASE_TABLE_NAMES 已经不再支持。取而代之的是,你应该通过设置文件来设置 lower_case_table_names 选项。
- 假如你仍旧希望使用环境变量的方式来设置 lower_case_table_names,可以从 MySQL 8.0 开始,通过环境变量 MYSQL_INIT_COMMAND 来执行一条 SQL 命令来设置这个参数。这可以通过在容器启动时执行一条 SQL 命令来实现。
- docker run --name some-mysql \ -e MYSQL_ROOT_PASSWORD=my-secret-pw \ -e MYSQL_INIT_COMMAND="SET GLOBAL lower_case_table_names=1;
- " \ -d mysql:5.7
复制代码 这条命令将在 MySQL 启动时执行 SQL 命令 SET GLOBAL lower_case_table_names=1;
,从而设置 lower_case_table_names 为 1,使得表名不区分巨细写。
4.2【保举】 镜像启动容器,挂载设置文件,让数据库不区分巨细写
创建一个包罗 my.cnf 文件的目录,并将该目录挂载到 Docker 容器中 MySQL 盼望读取设置文件的位置。
4.2.1.创建设置文件 创建一个 my.cnf 文件,并设置 lower_case_table_names:
下面是my.cnf 文件的内容
- [mysqld]
- lower_case_table_names=1
复制代码 4.2.2.启动 Docker 容器 使用 -v 参数挂载设置文件到容器内:
- docker run --name some-mysql -v /path/to/your/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.7
复制代码
- some-mysql是容器名称
- -e MYSQL_ROOT_PASSWORD=my-secret-pw 设置了暗码是my-secret-pw
- -d 是后台运行
- mysql:5.7是容器名称和版本
- -v /path/to/your/my.cnf:/etc/mysql/my.cnf :这里的 /path/to/your/my.cnf 是你主机上设置文件的位置,/etc/mysql/my.cnf 是容器内 MySQL 查找设置文件的位置。
注意事项
- 当你使用 -v 挂载设置文件时,请确保主机上的文件路径是精确的,并且文件具有精确的权限。
- 假如你在生产环境中使用这种方法,请确保你的容器有足够的权限访问挂载的卷,并且设置文件中的任何敏感信息都得到了妥善掩护。
- 假如你使用的是 MySQL 的官方镜像,请参考官方文档以获取最新的设置方法和细节。
4.2.3.验证设置是否生效
启动容器后,你可以通过登录 MySQL 并查询 lower_case_table_names 的值来验证设置是否生效:
- docker exec -it some-mysql mysql -uroot -p
复制代码
- 在这个命令中,some-mysql 是容器的名称,mysql -uroot -p 是用来连接 MySQL 数据库的命令。
- 运行这个命令后,你就可以执行sql语句了。
运行命令结果如下
- C:\Users\Administrator>docker exec -it mysqltest mysql -uroot -p
- Enter password:
复制代码 直接输入暗码即可;
这里需要输入暗码,我的暗码是123465
这里你输入暗码的动作是看不见的,不过没关系,直接输入即可;
运行命令结果如下
- C:\Users\Administrator>docker exec -it mysqltest mysql -uroot -p
- Enter password:
- Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 178Server version: 9.0.1 MySQL Community Server - GPLCopyright (c) 2000, 2024, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>
复制代码 执行以下命令-查询状态:
- SHOW VARIABLES LIKE 'lower_case_table_names';
复制代码
- 查询数据库是否支持巨细写
- lower_case_table_names 被设置为 1,即表名不区分巨细写。
- 假如值为 1,则表示表名和列名在 MySQL 中不区分巨细写。
- 假如值为 0 或 2,则表示表名和列名在 MySQL 中区分巨细写。
不过这些状态,在我测试中好像是不一样的。
我的是windows系统,他显示的就是2,但不区分巨细写。
执行查询数据库表的命令-进行验证:
- use mysql;
- SELECT * FROM db;
- use mysql;
- SELECT * FROM DB;
复制代码 这里查是数据库默认表,
直接sql后,假如可以正常显示表数据,则为正常;
截图如下:
图1
图2
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |