MySQLでユーザーを作成するとAccess Deniedで弾かれる

はい、出ました。
またMySQLのエラー。
zabbixでDB周りの監視をやるための設定をしている時に詰まりました。
ハマった経緯
いつもこちらのサイトを参考にさせてもらってるんですが、 MySQL監視用ユーザー作成の部分で詰まりました。
$ mysql -u root -p password: MariaDB [(none)]> grant process on *.* to zabbixagent@localhost identified by '<password>'; ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
はい、エラーです。
対処法
まずはmysqlを止める。
$ service mysqld stop
既にzabbixで監視対象にしているので、調査しているときに障害通知メールが来ました。
zabbix優秀ですね。
次に、 --skip-grant-tablesで立ち上げ直す。
$ mysqld_safe --skip-grant-tables
そして、/etc/my.cnf.d/server.cnfにskip-grant-tablesを追加する。
$ vim /etc/my.cnf.d/server.cnf ・ ・ ・ [mysqld] ・ ・ ・ skip-grant-tables #=> 僕は最後の行に入れました [galera] ・ ・ ・
ここまで終わったら、mysqlを立ち上げ直す。
$ service mysqld start
ここで、mysqlにログインしてみます。--skip-grant-tablesをやっているのでパスワード無しでいけます。
$ mysql -u root Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 3 Server version: 10.1.34-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
念願のcreate userをやってみると・・・
MariaDB [(none)]> create user zabbixagent identified by 'password'; ERROR 1290 (HY000): The MariaDB server is running with the --skip-grant-tables option so it cannot execute this statement
ん〜、だめっぽい。
データベースを見てみると、mysqlってのができているのでみてみると・・・
MariaDB [(none)]> use mysql; MariaDB[(mysql)]> show tables; +---------------------------+ | Tables_in_mysql | +---------------------------+ | column_stats | | columns_priv | | db | | event | | func | | general_log | | gtid_slave_pos | | help_category | | help_keyword | | help_relation | | help_topic | | host | | index_stats | | innodb_index_stats | | innodb_table_stats | | plugin | | proc | | procs_priv | | proxies_priv | | roles_mapping | | servers | | slow_log | | table_stats | | tables_priv | | time_zone | | time_zone_leap_second | | time_zone_name | | time_zone_transition | | time_zone_transition_type | | user | +---------------------------+
userってとこにありそう。
いろいろ探して、ここを参考に直接userをINSERTしてみました。
ここ↓を参考
MariaDB [mysql]> INSERT INTO mysql.user SET user = 'zabbixagent', host = 'localhost', password = Password('password'),
-> Select_priv = 'y',
-> Insert_priv = 'y',
-> Update_priv = 'y',
-> Delete_priv = 'y',
-> Create_priv = 'y',
-> Drop_priv = 'y',
-> Reload_priv = 'y',
-> Shutdown_priv = 'y',
-> Process_priv = 'y',
-> File_priv = 'y',
-> Grant_priv = 'y',
-> References_priv = 'y',
-> Index_priv = 'y',
-> Alter_priv = 'y',
-> Show_db_priv = 'y',
-> Super_priv = 'y',
-> Create_tmp_table_priv = 'y',
-> Lock_tables_priv = 'y',
-> Execute_priv = 'y',
-> Repl_slave_priv = 'y',
-> Repl_client_priv = 'y',
-> Create_view_priv = 'y',
2 # These groups are read by MariaDB server.
-> Show_view_priv = 'y',
-> Create_routine_priv = 'y',
-> Alter_routine_priv = 'y',
-> Create_user_priv = 'y',
-> Event_priv = 'y',
-> Trigger_priv = 'y',
-> Create_tablespace_priv = 'y';
Query OK, 1 row affected, 4 warnings (0.00 sec)
おっ、いけた。
userテーブルを見てみると先ほど入れたユーザーが入ってました。
いとをかし。
あと始末
先ほど追加した/etc/my.cnf.d/server.cnfのskip-grant-tablesを削除し、mysqlを起動し直します。
これでおkです。