备份/还原:mysqldump/binlog/LVM快照的备份/AB复制
第一种冷备
1.停掉mysql服务器
2.拷贝数据
cd /data
tar cjvf /tmp/mysql_bak.tar.bz2 ./
第二种逻辑备份:
mysqldump --在线备份,需要锁表,效率低。只能备份某个时刻数据状态.
# mysqldump -uroot -p147258369 DB > /tmp/DB.sql --单库
# mysqldump -uroot -p147258369 DB t1 > /tmp/DB.t1.sql --单表
# mysqldump -uroot -p147258369 --all-databases > /tmp/all.sql --全库
恢复:
# mysql -uroot -p123 < /tmp/all.sql
第三种增量数据:
binlog --记录着mysql服务器增删改的操作记录.
mysqlbinlog
--start-datetime=name 开始的时间
--stop-datetime=name 结束的时间
--start-position=# 开始的位置(POS)
--stop-position=# 结束的位置
mysql> flush logs;
# mysqlbinlog --start-position=190 --stop-position=833 mysqld.000001|mysql -uroot -p147258369
# mysqlbinlog --start-position=1554 --stop-datetime="2011-09-02 11:48:10" mysqld.000001 | mysql -uroot -p147258369
-----------------------------
备份方案1:
完全备份(mysqldump)+增量备份(binlog)
1.备份
# mysqldump -uroot -p147258369 --flush-logs --master-data=2 --all-databases > /tmp/all2.sql
--flush-logs --备份时先截断日志,产生新的日志
--master-data=2 --记录当前all2.sql,对应的binlog文件名叫什么.
查看完整备份文件中的字段
# vim /tmp/all2.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysqld.000002', MASTER_LOG_POS=106;
2.还原
# mysql -uroot -p147258369 < /tmp/all2.sql
# mysqlbinlog --start-position=106 --stop-datetime="2011-09-02 14:00:20" mysqld.000002 | mysql -uroot -p147258369
使用脚本备份:
# vim mysql_backup.sh
#!/bin/bash
name=`date +%Y%m%d-%T`
/usr/bin/mysqldump -uroot -p147258369 --flush-logs --master-data=2 --all-databases > /tmp/$name.sql
crontab -e 设置第天5天点钟做备份
00 05 * * * /bin/sh /var/ftp/notes/scripts/mysql_backup.sh &> /dev/null
----------------------------
方案2:
完全备份(LVM快照)+增量备份(binlog)
1、确认你当前的数据文件是否存放在LVM卷上
2、确认卷组有空闲空间
3、全库锁表并截断日志,然后新建快照
4、全库解锁
5、做完整的数据备份
6、删除快照
1、确认你当前的数据文件是否存放在LVM卷上
2、确认卷组有空闲空间
3、全库锁表并截断日志,然后新建快照
mysql> flush tables with read lock;
mysql> flush logs;
shell> mysql -uroot -p123 -N -e "show master status;" > /mnt/next_binlog.txt
shell> lvcreate -n data_snap -s /dev/vol0/lv_data -L 1G
shell> mount /dev/vol0/data_snap /mnt
4、全库解锁
mysql> unlock tables;
5、做完整的数据备份
shell> cd /mnt
shell> tar czf /var/tmp/mysql.tar.gz .
6、删除快照
shell> umount /mnt
shell> lvremove /dev/vol0/data_snap
-----------------------------------
从快照上还原数据:
# mysqladmin -uroot -p147258369 shutdown
# rm -rf /data2/*
# tar xvf mysql-snap.tar.gz -C /data2 --还原数据
# cd /opt/mysql-glibc/
# ./bin/mysqld_safe --defaults-file=/data2/my.cnf &
AB复制 --主从复制,可以实现在线备份.
主从服务器的作用:
1、“准“在线备份
2、负载分担
master-->slave1--slave2
\-6->slave3
master(binlog)-->slave
192.168.0.123 192.168.0.254
1、主从机器使用的mysql版本最好一致。
2、在主服务器上启用二进制日志,并且server-id的取值要大于从服务器。
3、在主服务器上新建一个用于同步数据的账号。
4、在主服务器上导出原始数据到从服务器上。
5、在从服务器上指定主服务器,指定账号、binlog、binlog的起始位置。
1、主从机器使用的mysql版本最好一致。
在这个实例中使用的都是mysql官方的RPM包
2、在主服务器上启用二进制日志,并且server-id的取值要大于从服务器。
# vim /etc/my.cnf
server-id=1
log-bin=/mysql/logs/mysqld
log-bin-index=/mysql/logs/test_idx
3、在主服务器上新建一个用于同步数据的账号。
mysql> grant replication slave,reload,super on *.* to s_user@'192.168.0.254' identified by '123';
4、在主服务器上导出原始数据到从服务器上。
master:
# mysqldump -uroot -puplooking --master-data=2 --all-databases > /opt/slave.sql
# scp /opt/slave.sql 192.168.0.254:/opt
# scp /etc/my.cnf 192.168.0.254:/etc/
slave:
# service mysql start
# mysql < /opt/slave.sql --导入数据
# vim /etc/my.cnf
[mysql]
port=3306
socket=/tmp/mysql.sock
default-character-set=utf8
[mysqld]
user=mysql
port=3306
socket=/tmp/mysql.sock
datadir=/var/lib/mysql/
character-set-server=utf8
sync-binlog=0
log_slow_queries
long-query-time=1
innodb_buffer_pool_size = 1G
innodb_max_dirty_pages_pct = 90
innodb_flush_log_at_trx_commit = 1
default-storage-engine=innodb
server-id=100
# service mysql restart
5、在从服务器上指定主服务器,指定账号、binlog、binlog的起始位置。
mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.0.123',
-> MASTER_USER='s_user',
-> MASTER_PASSWORD='123',
-> MASTER_PORT=3306,
-> MASTER_LOG_FILE='mysqld.000007',
-> MASTER_LOG_POS='288',
-> MASTER_CONNECT_RETRY=3;
mysql> start slave;
mysql> show slave status \G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Master_Log_File: mysqld.000008
Read_Master_Log_Pos: 610
Exec_Master_Log_Pos: 610
-------------------------
常用的命令:
start slave
stop slave
STOP SLAVE IO_THREAD ;
STOP SLAVE SQL_THREAD;
---------------------
在从服务器上启用binlog:
vim /etc/my.cnf
logs-slave-updates
logs-bin
转载于:https://blog.51cto.com/10880347/1338726