mysqlバックアップlvm

3638 ワード

mysqlバックアップlvm
新しいlvmディスクを作成します.ここで私が作ったlvはmydatalvで、/dataの下にマウントされています.
[root@localhost ~]# lvs
  LV       VG     Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert                                                  
  mydatalv mydata -wi-ao---- 1.00g   
[root@localhost ~]# df -h
                                      %    
/dev/mapper/mydata-mydatalv  976M  2.6M  907M    1% /data

元のデータベースファイルを/dataディレクトリにコピー
[root@localhost ~]# cp -a /var/lib/mysql /data/

プロファイルを変更し、mysqlデータベースファイルをlvmディスクに、バイナリファイルをlvmディスク以外の/var/lib/mysql/ディレクトリに配置します.
[root@ns1 ~]# vim /etc/my.cnf
    [mysqld]
    log_bin=/var/lib/mysql/mysql-bin
    datadir=/data/mysql
[root@localhost ~]# service mariadb restart
[root@localhost ~]# ls /data/mysql
aria_log.00000001  ibdata1      ib_logfile1  mysql-bin.000001  mysql-bin.000003  performance_schema
aria_log_control   ib_logfile0  mysql        mysql-bin.000002  mysql-bin.index   test
                 /data/mysql    

mysqlのロックテーブルバックアップ
[root@localhost ~]# mysql -e 'flush tables with read lock;'   
[root@localhost ~]# mysql -e 'flush logs;'                 ,
[root@localhost ~]# mysql -e 'show master status;' > /root/back.$(date +%F+%T)
[root@localhost ~]# ls
back.2016-07-13+10:14:29

lvのスナップショットの作成
[root@localhost ~]# lvcreate -L 1G -n mysqlback -p r -s /dev/mydata/mydatalv

リリースロック
[root@localhost ~]# mysql -e 'unlock tables;'

別のディスクにバックアップディレクトリを作成し、スナップショットを読み取り専用でマウントしてバックアップディレクトリにバックアップ
[root@localhost ~]# mkdir /myback
[root@localhost ~]# mount -r /dev/mydata/mysqlback /mnt
[root@localhost ~]# cp -a /mnt/mysql /myback

テーブルの内容を変更し、データベースファイルの内容である/data/mysqlの内容を削除します.
[root@localhost ~]# mysql
    MariaDB [hellodb]> use hellodb;
    MariaDB [hellodb]> insert into classes (class,numofstu) values ('xxoo',39);
[root@localhost ~]# rm -rf /data/*

プロファイル内のバイナリ・ログとデータベース・ファイルの場所の変更
[root@localhost ~]# vim /etc/my.cnf
    [mysqld]
    log_bin=/data/mysql/mysql-bin
    datadir=/data/mysql

/myback/のコンテンツ復元を利用
[root@localhost ~]# cp -a /myback/* /data/
[root@localhost ~]# service mariadb restart

バイナリ・ログを使用してスナップショットをリストアした後の操作は、次のファイルからスナップショット実行時のバイナリ・ログの場所を表示します.
[root@localhost ~]# cat back.2016-07-13+10\:14\:29 
File    Position    Binlog_Do_DB    Binlog_Ignore_DB
mysql-bin.000014        245

000014の245以降の操作をsqlファイルにして復元する
[root@localhost ~]# mysqlbinlog --start-position=245 /var/lib/mysql/mysql-bin.000014 > binlog.sql
[root@localhost ~]# mysql  
  

[root@localhost ~]# mysql
    MariaDB [(none)]> use hellodb;
    MariaDB [hellodb]> select * from classes;
    +---------+----------------+----------+
    | ClassID | Class          | NumOfStu |
    +---------+----------------+----------+
    |       1 | Shaolin Pai    |       10 |
    |       2 | Emei Pai       |        7 |
    |       3 | QingCheng Pai  |       11 |
    |       4 | Wudang Pai     |       12 |
    |       5 | Riyue Shenjiao |       31 |
    |       6 | Lianshan Pai   |       27 |
    |       7 | Ming Jiao      |       27 |
    |       8 | Xiaoyao Pai    |       15 |
    |       9 | xxoo           |       39 |
    +---------+----------------+----------+
    9 rows in set (0.00 sec)