0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【bashスクリプト実装】mysqlのデータベースを別なデータベースに複製する

Last updated at Posted at 2022-09-11

centos7からalmalinuxへの移行の冒頭でも記載した通り、
mysqlを家計分析・可視化に活用するようになってきました。
しかし、今までデータベースを誤って破損させてしまったときの考慮をしていなかったので、
バックアップファイルを定期取得するようにしました。

やりたいこととしては、下記の2つです。

①データベース(maindb)のバックアップ用として、backupmaindbを作成・リストア

mysqlデータベース複製スクリプト

[root@homeserver ~]# cat mysql_dump_getter.sh
#!/bin/bash

echo `date`_backups_mysql_process_was_doing >> /var/log/mysql_watcher.log
datearg=`date +%Y%m%d%H%M`
mysqldump -u root --password=`cat /root/.pgpassword_for_maindb` -h 127.0.0.1 --default-character-set=binary mysql > /var/lib/mysql/backups/${datearg}_mysql_dumpfiles
mysqldump -u root --password=`cat /root/.pgpassword_for_maindb` -h 127.0.0.1 --default-character-set=binary maindb > /var/lib/mysql/backups/${datearg}_maindb_dumpfiles
mysqldump -u root --password=`cat /root/.pgpassword_for_maindb` -h 127.0.0.1 --default-character-set=binary homeserver_wpdb > /var/lib/mysql/backups/${datearg}_homeserver_wpdb_dumpfiles
cp -pv /var/lib/mysql/backups/${datearg}_mysql_dumpfiles /root/backups/ >> /var/log/mysql_watcher.log
cp -pv /var/lib/mysql/backups/${datearg}_maindb_dumpfiles /root/backups/ >> /var/log/mysql_watcher.log
cp -pv /var/lib/mysql/backups/${datearg}_homeserver_wpdb_dumpfiles /root/backups/ >> /var/log/mysql_watcher.log
mysql -u root --password=`cat /root/.pgpassword_for_maindb` -h 127.0.0.1 --database=mysql -e "drop database backupmaindb;show databases;create database backupmaindb;show databases;"
mysql -u root --password=`cat /root/.pgpassword_for_maindb` -h 127.0.0.1 --default-character-set=binary backupmaindb < /var/lib/mysql/backups/${datearg}_maindb_dumpfiles

echo `date`_backups_files_remove_was_doing >> /var/log/mysql_watcher.log
ls -1t /var/lib/mysql/backups/*_dumpfiles | xargs rm -fv >> /var/log/mysql_watcher.log
ls -1t ./backups/*_dumpfiles | tail -n+10 | xargs rm -fv >> /var/log/mysql_watcher.log
echo `date`_backups_files_removewas_completed >> /var/log/mysql_watcher.log
echo `date`_backups_mysql_process_was_completed >> /var/log/mysql_watcher.log
[root@homeserver ~]#

※pgpassword_for_maindbはmysql時のパスワード認証で、パスワードを入力する必要があるのですが、
パスワードをファイル内容に記載することでノーパスログインを実現します。

  • リストアで、バイナリでダンプを取っているので、下記の通りbinary指定します。
    mysql -u root --password=パスワード -h ホスト名かipアドレス --default-character-set=binary backupmaindb < バックアップしたダンプファイル

②ダンプファイルも管理するbashスクリプトを作成し、cronに組み込む。

ダンプファイルの管理

バックアップをし続けるとたまってしまうため、定期的に削除するスクリプトを作成する必要があります。

Cronの設定

は下記のとおりです。

[root@homeserver ~]# crontab -l 
[root@homeserver ~]# 
[root@homeserver ~]# crontab -e
※「*/15 * * * * /root/mysql_dump_getter.sh」を追記
[root@homeserver ~]# crontab -l 
*/15 * * * * /root/mysql_dump_getter.sh
[root@homeserver ~]#

後書

同様にpostgresqlも同じようなバックアップ、リストアができます。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?