需求
当我们在rainbond平台上使用mysql数据库时,可能需要自定义配置文件,对于一般应用rainbond平台在环境变量的设置中是有配置文件设置这一项的,从这里就可以将将自定义配置文件挂载到容器内了,但是有尝试过的小伙伴应该会发现mysql的配置文件这样挂载进去是不会被读取的,这是由于mysql对配置文件的权限是有限制的,而通过配置文件项挂载进去的文件权限不满足mysql的要求,会因为安全问题而被忽略
解决方式
那有什么办法可以实现对mysql数据库配置文件的自定义呢?这就不得不提到一个名为env2file的小工具了,有兴趣的小伙伴可以点击这里来查看他的源码和更多使用方式,接下来主要介绍和演示一下这款小工具在rainbond平台上时如何使用的:
-
env2file介绍
- env2file是一款由环境变量生成配置文件的命令行工具,常用于集成的Docker容器中,在容器启动后、服务真正进程启动前执行。
- 获取方式
wget https://github.com/barnettZQG/env2file/releases/download/0.1.1/env2file-linux
-
使用方式
-
根据环境变量生成配置文件的命令示例
env2file create --perm 0644 --format mysql --path /etc/mysql/conf.d/custom.cnf
,其中create
表示创建配置文件,--perm
设置配置文件的权限,--format
选择配置文件类型,目前支持mysql及redis,--path
指定生成配置文件的路径 -
目前在rainbond应用市场发布的mysql数据库已经集成了env2file工具,使用时只需要配置环境变量即可自动生成配置文件,想要自行构建mysql镜像的小伙伴可以参考我们的mysql应用制作项目,设置环境变量的规则请参照
MYSQLC_MYSQLD_PORT=3306
,其中必须以MYSQLC_开头,表示为mysql配置文件设置的环境变量,第二部分MYSQLD
表示为配置块的名称,第三部分PORT
表示具体配置项的名称,生成的配置文件内容如下[mysqld] port = 3306
-
示例
-
从应用市场安装需要版本的mysql数据库,如需自己制作指定版本的数据库请参考rainbond团队的mysql应用制作项目
-
启动应用查看配置文件及在数据库内部查看本次演示相关配置
mysql> show variables like '%log_bin%'; +---------------------------------+-------+ | Variable_name | Value | +---------------------------------+-------+ | log_bin | OFF | | log_bin_basename | | | log_bin_index | | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | | sql_log_bin | ON | +---------------------------------+-------+ 6 rows in set (0.00 sec)
cat /etc/mysql/conf.d/custom.cnf [mysqld] port = 3306
-
设置环境变量
MYSQLC_MYSQLD_log-bin=/var/lib/mysql/binlog
,MYSQLC_MYSQLD_server-id=1
后,更新组件,再次查看mysql> show variables like '%log_bin%'; +---------------------------------+-----------------------------+ | Variable_name | Value | +---------------------------------+-----------------------------+ | log_bin | ON | | log_bin_basename | /var/lib/mysql/binlog | | log_bin_index | /var/lib/mysql/binlog.index | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | | sql_log_bin | ON | +---------------------------------+-----------------------------+ 6 rows in set (0.00 sec)
cat /etc/mysql/conf.d/custom.cnf [mysqld] log-bin = /var/lib/mysql/binlog port = 3306 server-id = 1
可以发现已经根据我们设置好的环境变量生成了相关的配置文件,并且已经生效了
-
对于部分比较特殊的配置参数,例如
skip-grant-tables
可以设置环境变量MYSQLC_MYSQLD_skip-grant-tables
为true
或者false
来决定是否生效;root@grf331aa-0:/# cat /etc/mysql/conf.d/custom.cnf [mysqld] log-bin = /var/lib/mysql/binlog port = 3306 server-id = 1 skip-grant-tables = false root@grf331aa-0:/# mysql ERROR 1045 (28000): Access denied for user 'root'@'127.0.0.1' (using password: NO)
root@grf331aa-0:/# cat /etc/mysql/conf.d/custom.cnf [mysqld] log-bin = /var/lib/mysql/binlog server-id = 1 port = 3306 skip-grant-tables = true root@grf331aa-0:/# mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 16 Server version: 5.6.41-84.1-log Percona Server (GPL), Release 84.1, Revision b308619 Copyright (c) 2009-2018 Percona LLC and/or its affiliates Copyright (c) 2000, 2018, 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>
可以看到,我们设置为ture时可以直接登录,无需密码,而设置成false则必须使用密码才可以登录。