当ブログの過去記事「WordPress手動バックアップとDocker環境へのリストア」ではDocker環境へのDBリストアはphpmyadmin上からSQLを実行する前提でした。しかしセキュリティリスク等何らかの理由でphpmyadminをインストール出来ない環境もあるかと思います。ここでは前回紹介しなかったコンテナ上で直接SQLを実行する手順を紹介します。
1.前提
WordPress等のDBをバックアップしたSQLファイルはすでに取得済みであること。
バックアップから始める場合はこちらの記事を参考にしてください。
ここでは、Wordpressの環境をbackup.sqlにバックアップ済みかつwordpressコンテンツのURLを置き換える「URL_UPDATE.sql」を準備済みの前提とします。
2.ファイルコピー
バックアップしたSQLファイルをホストにSCP又はFileZilla 等でコピーします。ホストのSQLファイルをコンテナにコピーします。カレントディレクトリは、/home/docker/test/phpsqlコンテナへのファイルコピーはdocker cp コマンドを使用します。
1 |
# docker cp <<ホストファイル名>> <コンテナID>:<<コンテナ内パス>> |
コピー先にコンテナIDを指定しますので対象のコンテナIDを調査します。
1 2 3 4 5 |
#docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f049c75423c5 phpsql_nginx "nginx -g 'daemon ..." 2 months ago Up 2 months 0.0.0.0:80->80/tcp, 443/tcp phpsql_nginx_1 0d80a6f749a0 phpsql_php7 "docker-php-entryp..." 2 months ago Up 2 months 9000/tcp phpsql_php7_1 b3fa7acc846f mysql "docker-entrypoint..." 2 months ago Up 2 months 3306/tcp phpsql_db_1 |
コンテナIDがわかったのここではmysqlコンテナの「b3fa7acc846f」を使用します。WordpressのバックアップSQL「BACKUP.sql」とコンテンツのURL置換SQL「URL_UPDATE.sql」をコンテナの/tmp/フォルダにコピーします。
1 2 |
# docker cp BlogURL_UPDATE.sql b3fa7acc846f:/tmp/ # docker cp backup.sql b3fa7acc846f:/tmp/ |
コピー結果を確認するため、コンテナにターミナルで接続します。
1 2 3 4 |
# docker exec -it phpsql_db_1 bash root@b3fa7acc846f:/#ls -la /tmp -rw-r--r--. 1 root root 4063703 Jun 6 05:00 backup.sql -rw-r--r--. 1 root root 1264 Jun 8 20:44 BlogURL_UPDATE.sql |
3.コンテナ内でSQL実行
コンテナにターミナルで接続した環境でmysqlに接続してからSQLコマンドを実行します。
対象DBはwp_dbwordpressとして既に存在していることとします。
1 2 3 4 |
root@b3fa7acc846f:/# mysql -u user_hoge -pXXXXXXXXX mysql> use wp_dbwordpress mysql> source backup.sql mysql> source BlogURL_UPDATE.sql |
今回DBを新規に作成する場合は、以下のスクリプトを参考にDBと接続ユーザを作成する
SQLを実行してください。
1 2 |
mysql> create database wp_dbwordpress default character set utf8; mysql> grant ALL PRIVILEGES on wp_dbwordpress.* to user_hoge@'%'identified by 'XXXXXXXXX'; |
4.ホストからコンテナに接続しSQLを実行
Docker exec -it コマンドでコンテナにターミナル接続しなくてもmysqlコマンドを実行できます(但しSQL実行に成功するのはSQLファイルが小さい場合のみです)。SQLファイルが大きい場合はコンテナにターミナル接続してSQLを実行するかphpmyaminを使用してSQLを実行するかのいずれかを選択する必要があります。
1 |
# docker exec -it phpsql_db_1 mysql -u user_hoge -pXXXXXXXXX wp_dbwordpress -e"$(cat BlogURL_UPDATE.sql)" |
5.参考にさせてい頂いたサイト
Dockerコンテナ内に入らずにMySQL公式コンテナの中にSQL等を実行するメモ
ありがとうございます。