Назад | Перейти на главную страницу

Файл my.cnf имеет значение, заголовки [] имеют значение?

У меня довольно простой вопрос,

Я делаю сценарий конфигурации для репликации mySQL между двумя новыми пустыми серверами, теперь, чтобы сделать его более безопасным, я добавил строки:

sed '/log-bin/d' /etc/my.cnf
sed '/server/d' /etc/my.cnf

Таким образом, если там уже установлены параметры конфигурации по умолчанию, он удалит соответствующие строки.

Теперь, на следующем этапе сценария, я хочу, чтобы он прочитал эти строки с желаемыми параметрами. Единственная проблема, с которой я столкнулся, заключается в том, что файл my.cnf состоит из

[mysqld]

Как и заголовки, мне интересно (и не могу найти с помощью Google), действительно ли они имеют значение, или предназначены ли они в основном для обозначения вещей.

могу я просто добавить

echo "log-bin=mysql-bin" >> /etc/my.cnf
echo "server-id=1" >> /etc/my.cnf

или они должны быть в разделе, отмеченном

[mysqld]

и если да, могу ли я "расширить" раздел, добавив еще

[mysqld]

внизу файла, чтобы у вас было 2х этот "регион"?

эффективно сделать это так:

#start file
[mysqld]
#options here
[mysql.server]
#options
[mysqld_safe]
#options
[mysqld]
log-bin=mysql-bin
server-id=1

Конечно. Параметры в группе применяются специально к этой программе. Например, [mysqld] применить к серверу mysqld, [client] группа опций читается всеми клиентскими программами, ...

По поводу вашего вопроса, sed можно вставить строку после нахождения шаблона, попробуйте следующее:

# sed '/\[mysqld\]/ a server-id=1' /etc/my.cnf
  • a команда означает добавление

Для удобства чтения его можно переписать в 2 строки:

# sed '/\[mysqld\]/ a\
> server-id=1' /etc/my.cnf

Возможно, вы захотите проверить, не server-id существовать первым:

# [ $(grep -c server-id /etc/my.cnf) -eq 0 ] && \
    sed '/^\[mysqld\]$/ a server-id=1' /etc/my.cnf