У меня довольно простой вопрос,
Я делаю сценарий конфигурации для репликации 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