在rainbond平台上如何设置mysql的配置文件

需求

当我们在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/binlogMYSQLC_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-tablestrue或者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则必须使用密码才可以登录。

2 Likes