首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用sed自定义mariadb Dockerfile中的缓冲区大小

无法使用sed自定义mariadb Dockerfile中的缓冲区大小
EN

Stack Overflow用户
提问于 2016-08-21 18:07:00
回答 1查看 540关注 0票数 1

我正在尝试自定义mariadb容器,使其具有更大的无害an缓冲区大小。我的理想方案是使用sed,这样我就不必维护一个重复的my.cnf配置文件。

这是我的Dockerfile,但它并没有像我预期的那样替换值,我不知道我做错了什么.

代码语言:javascript
复制
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;

这方面的产出如下:

代码语言:javascript
复制
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

我尝试过用\\来转义这些空间,而不是在没有运气的情况下转义这些空间。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-21 18:09:03

只是不要像你那样逃离这些空间:

  1. 空间不需要转义
  2. 在简单引号中使用\\进行转义实际上会创建一个\字符。难怪你的大梁不起作用。

这样做是可行的:

代码语言:javascript
复制
sed -i 's/innodb_buffer_pool_size = 256M/innodb_buffer_pool_size = 512M/g' /etc/mysql/my.cnf
  1. 如果你真的要转义什么,那只是因为regex,而不是shell,因为您使用了简单的引号,而shell没有解释内容。
  2. 对于这个特殊的例子,您不需要-r, --regexp-extended开关。regexp扩展包括诸如前向查找..。这里不需要。

改进:使用组来回忆匹配的值。如果必须更改参数名,则减少维护。

代码语言:javascript
复制
sed -i 's/\(innodb_buffer_pool_size\) = 256M/\1 = 512M/g' /etc/mysql/my.cnf

或匹配多个参数名称。

代码语言:javascript
复制
sed -i 's/\(innodb_buffer_pool_size\|some_other_param\) = 256M/\1 = 512M/g' /etc/mysql/my.cnf
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39067322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档