web-dev-qa-db-ja.com

MySQL:mysqld_safeオプション

構成ファイルで これらのオプション を指定する方法はありますか?

それらを[mysqld_safe]セクションに追加しようとしましたが、機能しません。

[mysqld_safe]
numa-interleave = 1
flush-caches = 1

-

# ps -ww -lfC mysqld_safe
F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root     17180     1  0  80   0 - 26549 wait   15:06 pts/1    00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/mysql.pid

私はPerconaサーバー5.5.30-30.2を使用していることに注意してください

編集:2013年8月28日-08:34:

残念ながら、この行は/etc/init.d/mysqlにありません。

# grep -n "interleave" < /etc/init.d/mysql
# echo $?
1

これらのオプションを手動で呼び出すことができます:

mysqld_safe --datadir=/mnt/data/mysql --pid-file=/mnt/data/mysql/db3.improve.pid --numa-interleave --flush-caches

しかし、オプションファイルを使用しても、defaultポリシーがあります。

# cat /proc/$(pidof mysqld)/numa_maps | cut -d ' ' -f 2 | uniq
default

これらのオプションをinitスクリプトにハードコーディングするか、MySQLデーモンを手動で開始する以外の方法が必要です...

編集:2013年8月29日-08:38:

Percona Server 5.5.28-29.1でテストしたところです。

/etc/init.d/mysqlにはnuma関連のエントリがまだありませんが、mysqld_safeスクリプトにはあります。

# grep -n "interleave" /usr/bin/mysqld_safe 
21:numa_interleave=0
67:  --numa-interleave          Run mysqld with its memory interleaved
215:      --numa-interleave) numa_interleave=1 ;;
777:# Set mysqld's memory interleave policy.
780:if true && test $numa_interleave -eq 1
785:    log_error "numactl command not found, required for --numa-interleave"
788:  Elif ! numactl --interleave=all true
794:  cmd="$cmd numactl --interleave=all"
795:Elif test $numa_interleave -eq 1
797:  log_error "--numa-interleave is not supported on this platform"

私はNiceopen_files_limitなどの他のオプションをテストしましたが、それらは正常に機能するため、initスクリプトにハードコードすることが唯一のオプションのようです

3
HTF

Perconaにはすでにそのオプションが組み込まれていると思います。

/etc/init.d/mysqlの中、どこかで

# numactl --interleave=all

これを発見したとき、OracleのMySQLをインストールするたびに、そのコマンドを/etc/init.d/mysqlに追加しました。

確実にしたい場合は、これを実行してください:

grep -n "interleave" < /etc/init.d/mysql

表示される行がわかります。

私は以前これについて話しました

投稿したリンク に基づいて、Percona Server 5.5.28からこれらの機能をアクティブ化できるはずです。 numactlに関する私の投稿は、明らかに以前のバージョンのPercona Serverからのものでした。

これらすべてを踏まえると、同じことがflush-cachesにも当てはまります。

2013-08-28 09:54 EDT更新

Percona Server 5.5.30があり、オプションがない場合は、Percona Server 5.5.28または5.5.29をDev Serverにインストールして、そこでテストします。次のように/etc/init.d/mysqlを確認します。

# grep -n "numa" /etc/init.d/mysql

あなたがそれを見つけたなら、Perconaはそのオプションを5.5.30に置くのを逃していたに違いありません(これは非常に驚くべきことです)。クイックフィックスとして、5.5.28/29からmysqld_safe行を取り、5.5.30のmysqld_safe呼び出しにハードコードします。

少なくとも、あなたが言ったラインを機能させる:

mysqld_safe --datadir=/mnt/data/mysql --pid-file=/mnt/data/mysql/db3.improve.pid --numa-interleave --flush-caches

そして、mysqld_safeが呼び出される5.5.30の/etc/init.d/mysqlに組み込みました。

ヒューマンエラー(Perconaでこのエラーが発生している(非常にありそうもない))がこの問題の理由であり、それ以上の問題ではないと思います。

2
RolandoMySQLDBA