サイドバーの壁紙
博主头像
tin博主等级

子の曰わく、我れ三人行なえば必ず我が師を得(う)。其の善き者を択びてこれに従う。其の善からざる者にしてこれを改む。

  • 累積執筆 72 記事
  • 累計作成 32 タグ
  • 累計受入 2 コメント

目 次CONTENT

記事目次

MySQLコンテナ内のデータを引っ越し、サーバ間の引っ越し

tin
tin
2023-02-18 / 0 コメント / 1 いいね! / 139 読み / 1,118 文字

背景

作業内容:

この前、AWS EC2サーバーにウェブサイトを立ち上げた。 WebサービスとMySQLは全てコンテナの形。今ではEC2中のMySQLデータを自分のローカルサーバに引っ越すつもり。

使用するツール:

👇electerm(EC2サーバにアクセス用),ダウンロードリンク
https://electerm.github.io/electerm/
👇WinSCP(サーバとローカルPC間のデータ通信を行う),ダウンロードリンク
https://winscp.net/eng/download.php

1.AWS-EC2において

1-1.引っ越す元サーバの状況を確認

コマンド 備考
docker ps | grep mysql MySQLコンテナのステータスを確認
docker exec -it mysql /bin/bash コンテナに入る
mysql -uroot -p -s ENTERキーを押し、パスワードを入力
show tables from halodb; 引っ越す元のデータを見る

image-1677293991406

1-2.数据导出

MySQLのインスタンスを新規する際、,以下の3つのボリュームを使った。(今回作業のコマンドではない!)。
-v /home/halo/mysql/data:/var/lib/mysql ホスト機ディレクトリ1:コンテナ内ディレクトリ1
-v /home/halo/mysql/conf:/etc/mysql/conf.d ホスト機ディレクトリ2:コンテナ内ディレクトリ2
-v /home/halo/mysql/logs:/var/log/mysql ホスト機ディレクトリ3:コンテナ内ディレクトリ3
備考:-vコマンドでホスト側とコンテナ側の指定ディレクトリを同期させて、インスタンスが万が一削除されても、データはまだホスト側に残す。これで、データの永続化を実現。

それで、データをexportする際、上記のコンテナ内ディレクトリ1~3のいずれかを選択。
ここで選択したのは:/var/lib/mysql
mysqldump -uroot -p --databases halodb > /var/lib/mysql/halodb.sql

image-1676686789266

1-3.export結果を確認

コマンド 備考
ls -l /var/lib/mysql/halodb.sql コンテナ内でexport結果を確認
exit コンテナを出る
ls -l /home/halo/mysql/data/halodb.sql ホスト側でもexport結果を確認

image-1677294986435

2.WinSCPでexport結果ファイルをローカルにダウンロード

image-1677300406632

3.引っ越す先(ローカルサーバ)において

3-1.查看docker状态和MySQL容器挂载卷

コマンド 備考
docker ps Dockerのステータス一覧を確認
ls -l /home/halo/mysql/ MySQLコンテナ用のホスト機ディレクトリを確認

image-1677295768863
備考:上記画像に出た/home/halo/mysql/conf/my.cnfファイルの中身:👇

[mysqld]
 # データディレクトリを指定
 datadir=/var/lib/mysql
 # サーバの文字コード
 character-set-server=utf8mb4
 collation-server=utf8mb4_unicode_ci
 # errorログ
 log-error=/var/log/mysql/error.log
 # 1:オン【自由選択】
 slow_query_log=1
 # 時間値【自由選択】 
 long_query_time=3
 # ログ	
 slow-query-log-file=/var/log/mysql/slow.log	
[client]
 default-character-set=utf8mb4
[mysql]
 default-character-set=utf8mb4

3-2.MySQLインスタンスを新規

docker run --name mysql \				
-v /home/halo/mysql/data:/var/lib/mysql \				
-v /home/halo/mysql/conf:/etc/mysql/conf.d \				
-v /home/halo/mysql/logs:/var/log/mysql \				
-p 3306:3306 \				
-e TZ=Asia/Tokyo \				
-e MYSQL_ROOT_PASSWORD=自分のパスワード \				
--net halo-net \				
--restart=unless-stopped \				
-d mysql:5.7.38				

image-1677295629625

3-3.WinSCPでローカルPCからローカルサーバにアップロード

image-1677300760876

3-4.ローカルサーバでexportファイルを確認

コマンド 備考
ls -l /home/halo/mysql/data/halodb.sql ローカルサーバのホスト側でexportファイルを確認
docker exec -it mysql /bin/bash コンテナに入る
ls -l /var/lib/mysql/halodb.sql コンテナ内でexportファイルを確認

image-1677301215297

3-5.exportファイルを使い、データを展開

コマンド 備考
exit MySQLを出るが、まだコンテナ内
mysql -uroot -p < /var/lib/mysql/halodb.sql パスワードを入力し、データを展開
mysql -uroot -p -s 再度MySQLに入り、展開結果を確認
show databases; 展開したデータベースを確認
show tables from halodb; 展開したデータを確認

image-1677301632273

1
  • 1

コメント欄