ホームページ > データベース > mysql チュートリアル > データディレクトリを移動した後にMySQLが起動できない問題の解決方法

データディレクトリを移動した後にMySQLが起動できない問題の解決方法

WBOY
リリース: 2023-05-26 10:13:05
転載
2500 人が閲覧しました

背景概要

データベースのインストール時にMySQLのデータディレクトリをルートディレクトリに配置したため、ストレージ容量が不足しています。データディレクトリをmvで別のディレクトリに移動したいのですが、データが他のデータ ディレクトリの後にディレクトリが移動されると、データベースの起動に失敗します。

問題の再現

このテストは MySQL 8.0.31

1. データベースを閉じます

mysql> shutdown;
Query OK, 0 rows affected (0.02 sec)
ログイン後にコピー

2. 現在のデータの場所を表示しますdirectory

shell> pwd
/mysql80
ログイン後にコピー

3. MySQL データ ディレクトリ全体を mv

shell>  mv /mysql80 /data
shell>  cd /data/mysql80/svr
shell>  ln -s mysql-8.0.31-linux-glibc2.12-x86_64 mysql
ログイン後にコピー

を通じて別のディレクトリに移動します4. 所有者グループを変更します

shell> chown -R mysql.mysql /data
ログイン後にコピー

5. データ ディレクトリのアドレスを変更します構成ファイル内

shell> sed -i 's#/mysql80#/data/mysql80#g' my5001.cnf
ログイン後にコピー

6. データベースの起動

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
ログイン後にコピー

7。

最終的に、検索により、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
ログイン後にコピー

8データベースを開始します

shell> /data/mysql80/svr/mysql/bin/mysqld_safe 
--defaults-file=/data/mysql80/conf/my5001.cnf --user=mysql &
ログイン後にコピー

データベースは正常に開始されました。

9. スレーブ ノードとして

#インスタンスが他のインスタンスのスレーブ ノードとしても使用される場合、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

10。問題解決

修正relaylog.indexファイル内のリレーログの絶対パス

sed -i 's#/mysql80#/data/mysql80#g' relaylog.index
ログイン後にコピー

データベースを再起動し、マスター/スレーブレプリケーションを開始します

# 重启实例
mysql> restart;
# 启动主从复制
mysql> start replica;
ログイン後にコピー

この時点で、マスター/スレーブレプリケーションは正常に戻ります。

以上がデータディレクトリを移動した後にMySQLが起動できない問題の解決方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート