🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

FreeBSD

FreeBSDは、Unix系のオープンソースのOSです。PC/AT互換機用ですが、他のプラットフォームにも移植されています。優れたネットワーク・セキュリティ・ストレージ機能で人気のOSです。ソースコードと共に無償で公開されており、多くの コミュニティによって長年に渡って開発されています。

Q&A

解決済

1回答

12704閲覧

MySQL 5.7.12のmysql_upgradeでのエラー

Y.K.

総合スコア7

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

FreeBSD

FreeBSDは、Unix系のオープンソースのOSです。PC/AT互換機用ですが、他のプラットフォームにも移植されています。優れたネットワーク・セキュリティ・ストレージ機能で人気のOSです。ソースコードと共に無償で公開されており、多くの コミュニティによって長年に渡って開発されています。

0グッド

0クリップ

投稿2016/05/08 03:09

###前提・実現したいこと
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からは次のように起動しています。

lang

1mysql_enable="YES" 2mysql_dbdir="/usr/local/spool/mysql" 3mysql_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の下に置いています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ちょっと気になったのは、datadir は、/usr/local/spool/mysql ではなく /usr/local/spool/mysql/mysql なんですね。

mysql_upgrade: [ERROR] 1146: Table 'mysql.plugin' doesn't exist

のエラーが出ているということは、データベースのファイルが見つからないんだと思いますが、
「データディレクトリ/mysql/plugin.*」のファイルはありますか?

投稿2016/05/08 22:37

編集2016/05/08 23:16
CHERRY

総合スコア25216

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Y.K.

2016/05/09 07:41

ご指摘のとおり、datadirの設定が間違っていました。 mysql DBのパスと勘違いしていたのですが、/usr/local/spool/mysqlに修正したところ起動するようになりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問