LoginSignup
0
0

More than 1 year has passed since last update.

MySQL8のバックアップ

Last updated at Posted at 2021-03-17

はじめに

開発環境側のmysqlデータ消しちゃって、あー、たしかにダンプまとめとかないとなぁ~って思って

ダンプファイル作成

パスワードを入れてmysqlコマンドを実行すると「Warning: Using a password on the command line interface can be insecure」が表示される

Console
# cd ~
# vi mysql-dbaccess.cnf
mysql-dbaccess.cnf
[client]
user = root
password = MYPASSWORD
Console(ぜんぶdump)
# mysqldump --defaults-extra-file=mysql-dbaccess.cnf -h localhost portfolio_db > ~/mysql_dump.sql
mv mysql_dump.sql /home/ubuntu

自動化

console
# mkdir -p /var/backup/mysql-dump
# cd /var/backup/mysql-dump
# vi mysql-backup.sh
mysql-backup.sh
#!/bin/sh

# -------------------------------------------------------
#
# [環境設定]
#

# バックアップファイルを保存するディレクトリパス
dirpath='/var/backup/mysql-dump'

# バックアップを保存する日数
period=14
# -------------------------------------------------------

#
# [バックアップ取得処理]
#
# ファイル名を定義  ※「mysql-dump-yyyymmdd.sql」となるようにします
fileprefix="mysql-dump-"
filedate=`date +%Y%m%d`
filename=$fileprefix$filedate

# mysqldumpを実行しdumpファイルを出力
mysqldump --defaults-extra-file=~/mysql-dbaccess.cnf -h localhost portfolio_db > $dirpath/$filename.sql --no-create-
info --skip-add-drop-table --ignore-table portfolio_db.register_user

# 出力されたdumpファイルのパーミション変更
chmod 700 $dirpath/$filename.sql

#
# [ローテーション処理]
#
# 削除対象年月日を取得
olddate=`date --date="$period days ago" +%y%m%d`

# 削除対象ファイル名を生成
oldfile=$fileprefix$olddate

# 削除実行
rm -f $dirpath/$oldfile.sql
シェルスクリプト実行
# cd /var/backup/mysql-dump
# sh mysql-backup.sh

crontab

console
# export EDITOR=vi
# crontab -e
  0 2 * * * /var/backup/mysql-dump/mysql-backup.sh

# chown -R ubuntu:ubuntu /var/backup/mysql-dump
# ls -l
  total 37476
  -rw-r--r-- 1 ubuntu ubuntu     1076 May 31 23:56 mysql-backup.sh
  -rwx------ 1 ubuntu ubuntu 38368295 Jun  5 12:08 mysql-dump-20220605.sql

ローカルへ転送

/home/ubuntu にあるダンプファイルをFTPかなんかでローカルに引っ張ってください。いまは自動化は考える余裕ないわ

MySQLにインポート

powershellでmysqlコマンドでsqlをインポート

console(CentOS,Windows)
dev\Portfolio> mysql -u root -p portfolio_db
mysql> source mysql_dump.sql
console(Ubuntu)違いがよくわからん
# mysql portfolio_db < mysql_dump.sql

point
dumpはSQLを実行するだけなので、例えば「サーバーよりも開発環境のほうがテーブルが追加されている」状態でdumpをインポートしても、新しいテーブルがあるままドスッと過去データが入る(あ、だめっぽい。ダンプファイルのCreate文調整してくれ)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0