データベースのインストール時にMySQLのデータディレクトリをルートディレクトリに配置したため、ストレージ容量が不足しています。データディレクトリをmvで別のディレクトリに移動したいのですが、データが他のデータ ディレクトリの後にディレクトリが移動されると、データベースの起動に失敗します。
このテストは MySQL 8.0.31
mysql> shutdown; Query OK, 0 rows affected (0.02 sec)
shell> pwd /mysql80
shell> mv /mysql80 /data shell> cd /data/mysql80/svr shell> ln -s mysql-8.0.31-linux-glibc2.12-x86_64 mysql
shell> chown -R mysql.mysql /data
shell> sed -i 's#/mysql80#/data/mysql80#g' my5001.cnf
shell> /data/mysql80/svr/mysql/bin/mysqld_safe \ --defaults-file=/data/mysql80/conf/my5001.cnf --user=mysql &
この時点で、データベースの起動に失敗し、エラー ログに次のエラーが報告されました:
mysqld: ファイル '/mysql80/dbdata/data5001/log/binlog .000012' が見つかりません (OS エラー番号 2 - そのようなファイルまたはディレクトリはありません)
2023-02-27T10:38:09.240576 08:00 0 [エラー] [MY-010958] [サーバー] ログ ファイルを開けませんでした。
2023-02-27T10:38:09.240657 08:00 0 [エラー] [MY-010041] [サーバー] TC ログを初期化できません
2023-02-27T10:38:09.240718 08:00 0 [エラー] ] [MY-010119] [サーバー] 中止中
2023-02-27T10:38:10.548605 08:00 0 [システム] [MY-010910] [サーバー] /data/mysql80/svr/mysql/bin/mysqld: シャットダウンが完了しました (mysqld 8.0.31) MySQL Community Server - GPL.
ここで報告されたエラーは、binlog が
ファイルが見つかりません。エラー メッセージには binlog
が表示されます。ディレクトリは以前と同じですが、構成ファイル内のディレクトリは変更されています
shell> grep 'log-bin' my5001.cnf log-bin=/data/mysql80/dbdata/data5001/log/binlog log-bin-trust-function-creators
最終的に、検索により、binlog.index
ファイルにはファイルの絶対パス アドレスが binlog
それぞれ格納されていることがわかりました。ここのパスは以前のままです。内容は次のとおりです:
shell> cat binlog.index /mysql80/dbdata/data5001/log/binlog.000001 /mysql80/dbdata/data5001/log/binlog.000002 /mysql80/dbdata/data5001/log/binlog.000003 /mysql80/dbdata/data5001/log/binlog.000004 /mysql80/dbdata/data5001/log/binlog.000005 /mysql80/dbdata/data5001/log/binlog.000006 /mysql80/dbdata/data5001/log/binlog.000007 /mysql80/dbdata/data5001/log/binlog.000008 /mysql80/dbdata/data5001/log/binlog.000009 /mysql80/dbdata/data5001/log/binlog.000010 /mysql80/dbdata/data5001/log/binlog.000011 /mysql80/dbdata/data5001/log/binlog.000012
binlog.index
ファイル内の binlog
の絶対パスを変更します。パス:
shell> sed -i 's#/mysql80#/data/mysql80#g' binlog.index shell> cat binlog.index /data/mysql80/dbdata/data5001/log/binlog.000001 /data/mysql80/dbdata/data5001/log/binlog.000002 /data/mysql80/dbdata/data5001/log/binlog.000003 /data/mysql80/dbdata/data5001/log/binlog.000004 /data/mysql80/dbdata/data5001/log/binlog.000005 /data/mysql80/dbdata/data5001/log/binlog.000006 /data/mysql80/dbdata/data5001/log/binlog.000007 /data/mysql80/dbdata/data5001/log/binlog.000008 /data/mysql80/dbdata/data5001/log/binlog.000009 /data/mysql80/dbdata/data5001/log/binlog.000010 /data/mysql80/dbdata/data5001/log/binlog.000011 /data/mysql80/dbdata/data5001/log/binlog.000012
shell> /data/mysql80/svr/mysql/bin/mysqld_safe --defaults-file=/data/mysql80/conf/my5001.cnf --user=mysql &
データベースは正常に開始されました。
#インスタンスが他のインスタンスのスレーブ ノードとしても使用される場合、relaylog.index ファイル内のリレー ログの絶対パスに注意してください。設定する必要があります。設定しない場合は、次のエラーが報告されます: エラー ログ error:
2023-02-27T15:56:55.224372 08:00 0 [ERROR] [MY-010599] [Repl ] log /mysql80/dbdata/data5002/log/relaylog.000002 はインデックスにリストされていますが、stat.
2023-02-27T15:56:55.224422 08:00 0 [ERROR] [MY-011059] [Repl] に失敗しました。 ] リレー ログ スペースのカウント中にエラーが発生しました。
2023 -02-27T15:56:55.226571 08:00 0 [エラー] [MY-010426] [Repl] スレーブ: チャネル ''; そのレコードのマスター情報構造の初期化に失敗しました'mysql.slave_master_info' テーブルにまだ存在する可能性があります。削除することを検討してください。
2023-02-27T15:56:55.226622 08:00 0 [ERROR] [MY-010529] [Repl] レプリケーション情報の作成または回復に失敗しましたrepositories.
開始レプリカの実行時にエラーも報告されます:
# クライアント エラー
mysql>開始レプリカ;
ERROR 1872 (HY000) : スレーブはリポジトリからのリレー ログ情報構造の初期化に失敗しました
# エラー ログ error
2023-02-27T15:57:53.858798 08:00 8 [ERROR] [MY-013124] [Repl] チャネルのスレーブ SQL '': スレーブはリポジトリからのリレー ログ情報構造の初期化に失敗しました。エラーコード: MY-013124
修正relaylog.index
ファイル内のリレーログの絶対パス
sed -i 's#/mysql80#/data/mysql80#g' relaylog.index
データベースを再起動し、マスター/スレーブレプリケーションを開始します
# 重启实例 mysql> restart; # 启动主从复制 mysql> start replica;
この時点で、マスター/スレーブレプリケーションは正常に戻ります。
以上がデータディレクトリを移動した後にMySQLが起動できない問題の解決方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。