MySQL 5.7.12のmysql_upgradeでのエラー
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 7,576
前提・実現したいこと
FreeBSD 10.3上でMySQLを5.7.10から5.7.12にportmasterを使ってアップデートしたところ、DBにアクセスできなくなりました。
できればダンプからデータベースを復元することなくアップデートを終わらせたいのですが、どのファイルを修正したら良いのでしょうか。
発生している問題・エラーメッセージ
mysql_upgradeを実行すると、次のようなエラーが出ます。
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
mysql_upgrade: [ERROR] 1146: Table 'mysql.plugin' doesn't exist
ログファイルを見ると、次のようにエラーが出ています。pluginテーブルだけでなく、他のMySQLテーブルにも「テーブルが存在しない」というエラーがいくつも出ます。
2016-05-08T01:11:56.201600Z 0 [Warning] InnoDB: Cannot open table mysql/plugin from the internal data dictionary of InnoDB thoug
h the .frm file for the table exists. Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting.html for how
to resolve the issue.
mysqld: Table 'mysql.plugin' doesn't exist
2016-05-08T01:11:56.201790Z 0 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
2016-05-08T01:11:56.203440Z 0 [Note] InnoDB: Buffer pool(s) load completed at 160508 10:11:56
2016-05-08T01:11:56.201790Z 0 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
該当のソースコード
/etc/rc.confからは次のように起動しています。
mysql_enable="YES"
mysql_dbdir="/usr/local/spool/mysql"
mysql_args="--mysqld-safe-log-timestamps=HYPHEN"
my.cnfの内容は、次のようにしています。
[client]
port = 3306
socket = /tmp/mysql.sock
[mysql]
no_auto_rehash
default-character-set = utf8mb4
[mysqld]
user = mysql
port = 3306
socket = /tmp/mysql.sock
bind-address = 127.0.0.1
basedir = /usr/local
datadir = /usr/local/spool/mysql/mysql
tmpdir = /var/db/mysql_tmpdir
slave-load-tmpdir = /var/db/mysql_tmpdir
secure-file-priv = /var/db/mysql_secure
log-bin = mysql-bin
log-output = TABLE
master-info-repository = TABLE
relay-log-info-repository = TABLE
relay-log-recovery = 1
slow-query-log = 1
server-id = 1
sync_binlog = 1
sync_relay_log = 1
binlog_cache_size = 16M
expire_logs_days = 30
default_password_lifetime = 0
enforce-gtid-consistency = 1
gtid-mode = ON
safe-user-create = 1
lower_case_table_names = 1
explicit-defaults-for-timestamp = 1
myisam-recover-options = BACKUP,FORCE
open_files_limit = 32768
table_open_cache = 16384
table_definition_cache = 8192
net_retry_count = 16384
key_buffer_size = 256M
max_allowed_packet = 64M
query_cache_type = 0
query_cache_size = 0
long_query_time = 0.5
innodb_buffer_pool_size = 1G
innodb_data_home_dir = /usr/local/spool/mysql/mysql
innodb_log_group_home_dir = /usr/local/spool/mysql/mysql
innodb_data_file_path = ibdata1:128M:autoextend
innodb_temp_data_file_path = ibtmp1:128M:autoextend
innodb_flush_method = O_DIRECT
innodb_log_file_size = 256M
innodb_log_buffer_size = 16M
innodb_write_io_threads = 8
innodb_read_io_threads = 8
innodb_autoinc_lock_mode = 2
skip-symbolic-links
character-set-server = utf8mb4
[mysqldump]
max_allowed_packet = 256M
quote_names
quick
試したこと
まず、/etc/my.cnfを/usr/local/etc/mysql/my.cnfに移動しました。
次にmy.cnfの中身をmy.cnf.sampleからコピーし、ディレクトリ指定を自分の環境に合わせて書き換えました。(sampleからコピーする前は、デーモンとして起動することもできていませんでした。)
mysqlにログインしてshow tableで確認すると、一覧にpluginテーブルも含まれていますが、テーブル内容を表示しようとすると、エラーとなります。
mysql> use mysql;
Database changed
mysql> show tables;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| engine_cost |
| event |
| func |
| general_log |
| gtid_executed |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| host |
| innodb_index_stats |
| innodb_table_stats |
| ndb_binlog_index |
| plugin |
| proc |
| procs_priv |
| proxies_priv |
| server_cost |
| servers |
| slave_master_info |
| slave_relay_log_info |
| slave_worker_info |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
32 rows in set (0.01 sec)
mysql> select * from plugin;
ERROR 1146 (42S02): Table 'mysql.plugin' doesn't exist
補足情報(言語/FW/ツール等のバージョンなど)
OSは、FreeBSD10.3-RELEASE-p2です。
MySQLは5.7.10から5.7.12にアップデートしようとしています。
アップデートにはportmaster 3.17.9を使用しました。
VOBは/usr/local/spool/mysqlの下に置いています。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
ちょっと気になったのは、datadir は、/usr/local/spool/mysql ではなく /usr/local/spool/mysql/mysql なんですね。
mysql_upgrade: [ERROR] 1146: Table 'mysql.plugin' doesn't exist
のエラーが出ているということは、データベースのファイルが見つからないんだと思いますが、
「データディレクトリ/mysql/plugin.*」のファイルはありますか?
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.09%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2016/05/09 16:41
mysql DBのパスと勘違いしていたのですが、/usr/local/spool/mysqlに修正したところ起動するようになりました。
ありがとうございました。