1. 程式人生 > >MySQL數據管理5

MySQL數據管理5

數據庫中日誌文件 主從同步

llbakt2.sh 功能:

把服務器上userdb庫t2表的所有記錄備份到本機/mybak文件


夾裏。使用系統日期做備份文件名例如 2017-05-25-t2.sql


mkdir /shell

vim /shell/allt2bak.sh

#!/bin/bash

day=`date +%Y-%m-%d`

if [ ! -e /mybak ];then

mkdir /mybak

fi

mysqldump -hlocalhost -uroot -p123123 --flush-


logs userdb t2 > /mybak/$day-t2.sql

:wq


chmod +x /shell/allt2bak.sh &> /dev/null


/shell/allt2bak.sh

ls /mybak/*.sql


crontab -e

00 18 * * 1 /shell/allt2bak.sh &> /dev/null

00 18 * * 2-7 /shell/baknewbinlog.sh

備份每天新生成的binlog日誌文件

:wq


systemctl status crond

++++++++++++++++++++++++++++++

day05

實時增量備份:啟用mysql服務的binlog日誌實現

1 binlog日誌介紹: 也叫二進制日誌,是mysql服務日誌文件


一種,記錄客戶端連接數據庫服務器後,執行的除查詢之外的


SQL命令。


查詢包括:select show desc


2 啟用binlog日誌

vim /etc/my.cnf

[mysqld]

server_id=12

log_bin

binlog_format="mixed"

:wq

#systemctl restart mysqld


ls /var/lib/mysql/

localhost-bin.000001 日誌文件

localhost-bin.index 日誌索引文件


查看binlog日誌文件的內容

mysqlbinlog binlog日誌文件


自定義binlog日誌文件名和存儲目錄

#mkdir /logdir

#chow mysql /logdir

#vim /etc/my.cnf

[mysqld]

server_id=12

#log_bin

log_bin=/logdir/plj

binlog_format="mixed"

:wq

#systemctl restart mysqld

ls /logdir/


3 執行binlog日誌文件裏的SQL命令恢復數據。


命令格式

mysqlbinlog 選項 binlog日誌文件 | mysql -uroot -


p123123


選項

pos節點

--start-position=數字

--stop-position=數字


時間點

--start-datetime="yyyy-mm-dd hh:mm:ss"

--stop-datetime="yyyy-mm-dd hh:mm:ss"


mysqlbinlog --start-position=1400 --stop-


position=1816 /logdir/plj.000001 | mysql -uroot -


p123123



手動創建新的binlog日誌文件

# systemctl restart mysqld


mysql> flush logs;


# mysql -uroot -p123123 -e "show databases"


#mysqldump -uroot -p123123 --flush-logs userdb >


/opt/userdb.sql

刪除已有的binlog日誌文件?


把編號之前的日誌文件刪除

mysql> purge master logs to "binlog文件名";

mysql>purge master logs to "plj.000003";


刪除所有的binlog日誌文件,重新生成第一個日誌文件

mysql> reset master ;


+++++++++++++++++++++++++++++

安裝第3方軟件做增量備份與恢復

# rpm -q perl-DBD-MySQL perl-Digest-MD5

# rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm

# rpm -ivh percona-xtrabackup-24-2.4.7-


1.el7.x86_64.rpm


命令格式

#innobackupex <選項>


db105.t1 (200-700)

#innobackupex --user root --password 123123 --


databases="db105.t1" /fullbak --no-timestamp


db105.t1(10 -- 777)

# innobackupex --user root --password 123123 --


databases="db105.t1" --incremental /new1dir --


incremental-basedir=/fullbak --no-timestamp


db105.t1(7 -- 3333)

# innobackupex --user root --password 123123 --


databases="db105.t1" --incremental /new2dir --


incremental-basedir=/new1dir --no-timestamp



# cp -r /var/lib/mysql/mysql /opt/mysql.bak


增量恢復數據

1 默認數據丟失

rm -rf /var/lib/mysql

mkdir /var/lib/mysql

chown mysql:mysql /var/lib/mysql


2 恢復日誌文件

#innobackupex --user root --password 123456 --


databases="db105.t1" --apply-log --redo-only /fullbak

#innobackupex --user root --password 123456 --


databases="db105.t1" --apply-log --redo-only


/fullbak --incremental-dir="/new1dir"


#innobackupex --user root --password 123456 --


databases="db105.t1" --apply-log --redo-only


/fullbak --incremental-dir="/new2dir"


3 把備份目錄下文件拷貝回數據庫目錄下

# innobackupex --user root --password 123456 --


databases="db105.t1" --copy-back /fullbak

# cp -r /opt/mysql.bak /var/lib/mysql/mysql

#chown -R mysql:mysql /var/lib/mysql/

4 重啟數據庫服務

#systemctl restart mysqld

5 登錄查看數據

mysql -uroot -p123123

mysql> select * from db105.t1;


備份過程

lsn 日誌序列號

數據庫目錄下

ib_logfile0

ib_logfile1

ibdata1


備份目錄下

xtrabackup_checkpoints

xtrabackup_logfile

ibdata1



#systemctl stop mysqld

#mv /etc/my.cnf /etc/my.cnf.bak

#rm -rf /var/lib/mysql

#mysql_install_db --datadir=/var/lib/mysql --


user=mysql

#rm -rf /var/lib/mysql/mysql/

#cp -r /opt/mysql.bak/ /var/lib/mysql/mysql

# chown -R mysql:mysql /var/lib/mysql

# systemctl status mysqld


恢復完全備份文件中的某個表


mysql> drop table bbsdb.a;


#innobackupex --user root --password 654321 --


databases="bbsdb" --apply-log --export /allbak //導出


表信息


mysql> create table gamedb.a(id int); //創建表


mysql> alter table bbsdb.a discard tablespace; //刪除


表空間


mysql> system cp /allbak/bbsdb/a.{ibd,cfg,exp}


/var/lib/mysql/bbsdb //拷貝表信息文件


mysql> system chown mysql:mysql


/var/lib/mysql/bbsdb/a.* //修改所有者


mysql> alter table bbsdb.a import tablespace; //導入


表空間


mysql> select * from gamedb.a;

++++++++++++++++++++++++++++++++++++

MySQL 主從同步

12

主數據庫服務器的配置

mysql> grant replication slave on *.* to plj@"%"


identified by "123456";

vim /etc/my.cnf

[mysqld]

server_id=12

log_bin=master12

binlog_format="mixed"

:wq


# systemctl restart mysqld


mysql> show master status;



11

配置從數據庫服務器

# mysql -h192.168.4.12 -uplj -p123456


vim /etc/my.cnf

[mysqld]

server_id=11

log_bin=slave11

:wq


# systemctl restart mysqld


mysql> show slave status;

Empty set (0.00 sec)


mysql> change master to


master_host="192.168.4.12",master_user="plj",master_


password="123456",master_log_file="master12.000001


",master_log_pos=154;

mysql> start slave;

mysql> show slave status\G;

Slave_IO_Running: Yes

Slave_SQL_Running: Yes


測試主從同步配置

12

mysql -uroot -p123123

mysql> create database db105;create table db105.a


(id int); insert into db105.a values(100);


11

mysql -uroot -p654321

mysql>select * from db105.a;


MySQL數據管理5