|||||||||||||||||||||

なんぶ電子

- 更新: 

DebianのMariaDBのエラー

MariaDB

Debianサーバーの処理が遅いなと感じて調べていたら、MariaDB(MySQL)のログ(/var/log/mysql/error.log)に次のようなエラーがでていました。

Incorrect definition of table mysql.event: expected column 'sql_mode' at position 14 to have type set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','IGNORE_BAD_TABLE_OPTIONS','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH','EMPTY_STRING_IS_NULL','SIMULTANEOUS_ASSIGNMENT'), found type set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','IGNORE_BAD_TABLE_OPTIONS','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALU

これがサーバーを遅くしている原因かどうかは不明ですが、とりあえずこれはこれで対応しないといけません。

エラーログには続けてmysql_upgradeを実行するようにとのメッセージも出ていました。

また、ネットでも、次のようなページが見つかりました。

MariaDB(MySQL)のアップグレード時にmysql_upgradeを実行しなかったり、失敗したりすると出る現象だそうです。先のサイトに書かれているように実行してみます。

  1. 念のためバックアップを取ります。

    cp -a /var/lib/mysql/ /var/lib/mysql_bkup/

  2. mysql_upgradeを実行します

    # mysql_upgrade -u root -p
    # パスワード
    ...

  3. MariaDB(MySQL)を再起動します

    # systemctl restart mysql

  4. エラーが出てないことを確認します

    # cat /var/log/mysql/error.log

ワーニング

ワーニングの方もいくつか出ていたので対応します。

IP address '192.168.1.1' could not be resolved: Name or service not known

これはDNSに逆引きしにいってクライアントが存在するか(不正でないか)をチェックした結果、クライアントが見つけられない為出力されています。

これを解決するには/etc/mysql/mariadb.conf.d/50-server.cnf(MariaDB)または、my.ini(MySQL)の[mysqld]の項目に次の値をセットすることで回避できます。

[mysqld]
skip-name-resolve

この設定で注意しないといけないのは、こちらのページにも書かれているように、名前解決をしなくなることにより認証エラーが起きることがあるという事です。

ちなみに、パスワードを設定した際、コンソールの履歴にそれが残るのはセキュリティ的に問題です。mysql_adminを使った場合(bash)は「history -c」コマンドを実行をすることで、MariaDB(MySQL)コンソールで処理した場合は、コンソールを起動させたユーザーのhomeディレクトリの.mysql_historyファイルを削除することで、履歴を削除することができます。

さらに、別のワーニングも出ていいました。

Access denied for user 'root'@'localhost' (using password: NO)

システムがrootでMariaDBにアクセスしようとしているけれど、パスワードなしではアクセスできないという感じのエラーのようです。

/etc/mysql/debian.cnfの[client]と[mysql_upgrade]のpasswordの箇所に現在指定してあるrootのパスワードを記入してやることでエラーが出なくなりました。編集しないようにとファイルには記載されていますが……。

IPv6で待機している?

ワーニングも消えましたがもう一つ気になるログがありました。

Server socket created on IP: '::'

アドレスのフォーマットがIPv6なのでIPv6で待機しているようです。IPv6では接続しないのでそれを止めます。先の50-server.cnf(またはmy.ini)にある次のエントリーを設定します。

bind-address = 0.0.0.0

これで再起動してい見るとログが次のようになってIPv4のみの待機に変わりました。

Server socket created on IP: '0.0.0.0'.

ちなみにbind-address接続先のIPアドレスを制限するエントリーです。「0.0.0.0」はIPv4のアドレスすべてを意味します。また、「*」とするとIPv4、6のすべてのアドレスに接続を許可します。

これらの設定で、Debianサーバのレスポンスが少し改善した気がします。

筆者紹介


自分の写真
がーふぁ、とか、ふぃんてっく、とか世の中すっかりハイテクになってしまいました。プログラムのコーディングに触れることもある筆者ですが、自分の作業は硯と筆で文字をかいているみたいな古臭いものだと思っています。 今やこんな風にブログを書くことすらAIにとって代わられそうなほど技術は進んでいます。 生活やビジネスでPCを活用しようとするとき、そんな第一線の技術と比べてしまうとやる気が失せてしまいがちですが、おいしいお惣菜をネットで注文できる時代でも、手作りの味はすたれていません。 提示されたもの(アプリ)に自分を合わせるのでなく、自分の活動にあったアプリを作る。それがPC活用の基本なんじゃなかと思います。 そんな意見に同調していただける方向けにLinuxのDebianOSをはじめとした基本無料のアプリの使い方を紹介できたらなと考えています。

広告