我试图自定义一个mariadb容器,使它有一个增加的innodb缓冲区大小。我的理想情况是使用sed
,这样我就不必维护一个重复的my.cnf
配置文件。
这是我的Dockerfile,但它没有像我期望的那样替换值,我不确定我做错了什么…
FROM mariadb:10.1
RUN sed -ri 's/innodb_buffer_pool_size\ =\ 256M/innodb_buffer_pool_size\ =\ 512M/g' /etc/mysql/my.cnf
&& cat /etc/mysql/my.cnf | grep innodb;
它的输出是:
Sending build context to Docker daemon 231.9 MB
Step 1 : FROM mariadb:10.1
---> 9a0138c02438
Step 2 : RUN sed -ri 's/innodb_buffer_pool_size\ =\ 256M/innodb_buffer_pool_size\ =\ 512M/g' /etc/mysql/my.cnf && cat /etc/mysql/my.cnf | grep innodb;
---> Running in eaedaf2837ff
#innodb_log_file_size = 50M
innodb_buffer_pool_size = 256M
innodb_log_buffer_size = 8M
innodb_file_per_table = 1
innodb_open_files = 400
innodb_io_capacity = 400
innodb_flush_method = O_DIRECT
#innodb_autoinc_lock_mode=2
#innodb_flush_log_at_trx_commit=0
---> b0e479c55581
Removing intermediate container eaedaf2837ff
Successfully built b0e479c55581
我试过用\
转义空格,而不是转义空格,没有运气。
只是不要像你那样转义空格:
- 空格不需要转义
- 转义与
\
在简单的引号实际上创建一个字符。难怪你的正则表达式不工作。
:
sed -i 's/innodb_buffer_pool_size = 256M/innodb_buffer_pool_size = 512M/g' /etc/mysql/my.cnf
- 如果你真的要转义一些东西,那将仅仅是因为regex,而不是shell,因为你使用了简单的引号,shell不会解释 的内容。
- 对于这个特定的示例,您不需要
-r, --regexp-extended
开关。Regexp扩展包括正向查找,…
改进:使用group收回匹配的值。如果必须更改参数名
,则维护更少sed -i 's/(innodb_buffer_pool_size) = 256M/1 = 512M/g' /etc/mysql/my.cnf
或匹配多个参数名
sed -i 's/(innodb_buffer_pool_size|some_other_param) = 256M/1 = 512M/g' /etc/mysql/my.cnf