MySQL數據管理5
把服務器上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