データベース管理者がサーバーにログインするか、phpMyAdminを起動して、データベースを1つずつ、またはテーブルごとに手動で最適化する必要がある場合は、少し面倒です。 DB管理者は、単に仕事をするのを忘れたり、最適化の頻度をより少ない時間に設定したりすることがあります。 MySQLデータベースのすべてのテーブルは、ビジー状態のサーバーで少なくとも1日1回チェックすることをお勧めします。
Linux / Unix / CentOS / FreeBSDのcrontab関数を使用して、MySQLプロセスの最適化を自動化することができます。 MySQLデータベースをチェックおよび最適化するためのcronジョブは、MySQLのインストールに付属するmysqlcheckクライアントユーティリティを使用して作成できます。 mysqlcheckクライアントは、MySQLデータベースのテーブルをチェック、修復、最適化、および分析できます。
新しいcronジョブを作成するには、rootまたは他のユーザーとしてサーバーにログインし、crontabファイルを編集します(ほとんどのオペレーティングシステムでは、 crontab -e crontabファイルをデフォルトのテキストエディタで開きます)、次のテキスト行を追加します。 cPanelを使用しているユーザーの場合は、「cronジョブ」をクリックして、毎日、1時間ごと、およびその他の間隔でcrontabを設定できます。経験豊富なウェブマスターは、rc.hourly、rc.daily、またはその他のcronディレクトリにcrontabファイルを設定することもできます。すべてのデータベースへのアクセス権を持たないMySQLまたは通常のユーザーとしてログインする場合、以下の例のようにrootのユーザーIDとパスワードを指定しない限り、すべてのデータベースを最適化することはできません。
0 1 * * * mysqlcheck -Aao --auto-repair -u root -p[password] > /dev/null
上記のステートメントの構文は「mysqlcheck[options]–all-databases」に似ています。ここで、–all-databasesパラメーターはデフォルトのアクションであり、データベースが指定されていないため、省略できます。このコマンドはmysqlcheckクライアントを実行して、毎日午前1時にすべてのデータベースを自動的に分析および最適化します。 -pとrootのパスワードの間にスペースがないことに注意してください。実行時間を好みに合わせて変更したり、mysqlcheckコマンドのオプションを変更したりすることもできます。特定のデータベースまたはデータベースなしの特定のテーブルをチェックして最適化するだけの場合は、次の構文を使用します。
mysqlcheck [options] db_name [tables] mysqlcheck [options] --databases DB1 [DB2 DB3...]
上記のコマンドから–auto-repair switchを削除することをお勧めします。これは、テーブルの修復操作により、状況によってはデータが失われる可能性があるためです。原因による操作には、ファイルシステムエラーが含まれますが、これに限定されません。 MySQLデータベースの文字セットと照合を変更した場合は、–default-character-setオプションも使用する必要があります。利用可能なすべてのスイッチとオプションの詳細については、こちらをご覧ください。