MySQL基础:在容器启动时动态设定参数
2019-06-14 08:15
120 查看
这篇文章介绍一下MySQL镜像启动时候通过command方式动态修改参数的方法,并以MySQL镜像缺省字符集修改的实际问题对应作为示例进行使用说明。
应用场景:
MySQL或者Mariadb官方镜像缺省的字符集为latin1,在前面的文章中介绍了对于全局/数据库/表/字段的字符集的查看/设定/修改的多种方式,但是大多方式都是在容器启动之后,或者是需要修改my.cnf的配置文件,从而可能需要修改镜像,把镜像的配置卷挂出来,然后修改设定文件,这些都需要一些额外的手动操作。
有关MySQL字符集查看和设定的内容可参看:
事前环境
可参看Easypack的Redmine的docker-compose.yml文件确认缺省状态下的MySQL数据库的字符集设定。文件内容如下所示:
version: '2' services: redmine: image: liumiaocn/redmine ports: - 3000:3000 environment: REDMINE_DB_MYSQL: redmine REDMINE_DB_PASSWORD: secret depends_on: - redminedb restart: never redminedb: image: liumiaocn/mysql environment: MYSQL_ROOT_PASSWORD: secret MYSQL_DATABASE: redmine restart: never
链接地址:
https://github.com/liumiaocn/easypack/blob/master/containers/alpine/redmine/docker-compose.yml
启动命令:docker-compose up -d
- 字符集确认
进入到启动的MySQL容器中,可以看到相关设定均为latin1
liumiaocn:redmine liumiao$ docker exec -it redmine_redminedb_1 sh # mysql -uroot -psecret mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 Server version: 8.0.0-dmr MySQL Community Server (GPL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show variables like '%character%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec) mysql>
设定方法
通过command可以传入相关参数,这里以设定上述latin1相关的选项为utf8为例进行说明,这里使用这样的一个docker-compose的设定文件
liumiaocn:redmine liumiao$ cat docker-compose.utf8.yml version: '2' services: redmine: image: liumiaocn/redmine ports: - 3000:3000 environment: REDMINE_DB_MYSQL: redminedb REDMINE_DB_PASSWORD: secret depends_on: - redminedb restart: "no" redminedb: image: liumiaocn/mysql environment: MYSQL_ROOT_PASSWORD: secret MYSQL_DATABASE: redmine command: ['mysqld','--character_set_server=utf8'] restart: "no" liumiaocn:redmine liumiao$
启动命令:docker-compose -f docker-compose.utf8.yml up -d
结果确认
liumiaocn:redmine liumiao$ docker exec -it redmine_redminedb_1 sh # mysql -uroot -psecret mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 8.0.0-dmr MySQL Community Server (GPL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show variables like '%character%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec) mysql>
Redmine镜像方式启动服务经常碰到的中文问题之一就是由于所使用的数据库创建的时候未指定utf8所导致,此处将MySQL的缺省设定设定未utf8,则可以达到曲线对应的目的。
mysql> show create database redmine; +----------+------------------------------------------------------------------+ | Database | Create Database | +----------+------------------------------------------------------------------+ | redmine | CREATE DATABASE `redmine` /*!40100 DEFAULT CHARACTER SET utf8 */ | +----------+------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql>
相关文章推荐
- docker基础:修改容器设定文件导致无法启动的对应方法
- MYSQL启动参数
- mysql启动参数(/etc/my.cnf)详解汇总
- MySQL高速缓存启动方法及参数详解query_cache_size=32M query_cache_type=1
- 一些mysql启动参数的说明和优化方法
- MySQL基础一---MYSQL启动和打开等操作
- skip-grant-tables:非常有用的mysql启动参数
- mongoDB基础知识3----启动命令mongod参数说明
- MySQL高速缓存启动方法及参数详解(query_cache_size)
- mysql基础:mysqld_safe 启动执行流程详解
- MySQL自动清除binlog的参数设定
- 动态修改MYSQL配置参数
- MySQL安装后的设定及其变量(参数)的设置
- mysql 存储过程 根据参数 动态执行sql语句
- MYSQL基础:参数调优:1:InnoDB调优参数基本信息一览
- k8s使用NFS做动态存储做mysql容器主从同步
- MySQL高速缓存启动方法及参数详解
- MySQL中limit使用动态参数的解决方法(拼接SQL字符串语句来执行SQL)
- skip-grant-tables:非常有用的mysql启动参数
- skip-grant-tables:非常有用的mysql启动参数