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;