您的位置:新葡亰496net > 电脑系统 > 新葡亰496net:备份与还原,备份和还原

新葡亰496net:备份与还原,备份和还原

发布时间:2019-07-28 23:11编辑:电脑系统浏览(65)

     

    1、mariadb的日志

    询问日志:general_log
    慢查询日志:log_slow_queries
    谬误日志:log_error, log_warnings
    二进制日志:binlog
    联网日志:relay_log
    业务日志:innodb_log

    1、查询日志
    记录查询语句,日志存储位置:
    文件:file
    表:table (mysql.general_log)         
    general_log={ON|OFF}查询日志开启方式
    general_log_file=HOSTNAME.log 查询日志文件的名字
    log_output={FILE|TABLE|NONE}查询日志的输出位置,如果这里为none,即使general_log为on也不会开启
    查询日志一般是不会开启的
    2、慢查询日志
    慢查询:运行时间超出指定时长的查询;
    long_query_time
    存储位置:
    文件:FILE
    表:TABLE,mysql.slog_log  
    log_slow_queries={ON|OFF}是否启动慢查询日志
    slow_query_log={ON|OFF}慢查询日志是否启动以上两项都要开启才能启动慢查询日志
    slow_query_log_file=hostname-slow.log慢查询日志存放的位置,一般存放在数据目录下的此文件
    log_output={FILE|TABLE|NONE}
    log_slow_filter=admin,filesort,filesort_on_disk,full_join,full_scan,query_cache,query_cache_miss,tmp_table,tmp_table_on_disk出现哪种情况的才启动慢慢查询日志
    log_slow_rate_limit慢查询日志的速率,一秒钟记录多少条慢查询日志
    log_slow_verbosity慢查询日志记录的详细程度
    3、错误日志
    记录如下几类信息:
    (1) mysqld启动和关闭过程中输出的信息; 
    (2) mysqld运行中产生的错误信息; 
    (3) event scheduler事件调度器运行时产生的信息;事件调度器相当于mysql的计划任务
    (4) 主从复制架构中,从服务器复制线程启动时产生的日志;               
    log_error=/var/log/mariadb/mariadb.log|OFF表示关闭错误日志
    log_error=/var/log/mariadb/mariadb.log表示开启错误日志,不用加on
    log_warnings={ON|OFF}是否记录警告信息到日志文件中,1表示记录,0表示不记录
    错误日志一般是要开启的
    4、二进制日志
    用于记录引起数据改变或存在引起数据改变的潜在可能性的语句(STATEMENT)或改变后的结果(ROW),也可能是二者混合;
    功用:用于"重放"日志文件中的事件来生成数据副本
    binlog_format={STATEMENT|ROW|MIXED}二进制日志记录的格式
    STATEMENT:语句;记录SQL语句
    ROW:行;记录语句执行的结果,比如修改年龄大于50的所有人的工资,这样会记录所有符合修改条件的行,而不是记录执行的SQL语句
    MIXED:混编;
    show global variables like 'binlog_format'
    查看二进制日志文件列表:
    SHOW MASTER|BINARY LOGS;
    查看当前正在使用的二进制日志文件:
    SHOW MASTER STATUS;
    查看二进制日志文件中的事件:
    SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
    服务器变量:
    log_bin=/PATH/TO/BIN_LOG_FILE启动二进制日志,只能写到配置文件中才能启动二进制日志,不能通过命令进行启动,是一个只读变量;
    session.sql_log_bin={ON|OFF},运行时设置是否开启二进制日志
    max_binlog_size=1073741824大概1g,超过1g就会滚动
    sync_binlog={1|0}是否启用二进制日志同步功能,只要事物commit就触发二进制同步操作,将内存缓冲区的信息写到磁盘上的二进制文件中。
    mysqlbinlog:客户端命令工具
    --start-datetime=根据开始时间查看二进制日志,时间格式YYYY-MM-DD hh:mm:ss
    --stop-datetime=根据结束时间
     -j, --start-position=#  根据开始位置
     --stop-position=#  根据结束位置
    二进制日志事件格式:
    # at 553
    #160831  9:56:08 server id 1  end_log_pos 624   Query   thread_id=2     exec_time=0     error_code=0
    SET TIMESTAMP=1472608568/*!*/;
    BEGIN
    /*!*/;  
    事件的起始位置:# at 553
    事件发生的日期时间:#160831  9:56:08
    事件发生的服务器id:server id 1
    事件的结束位置:end_log_pos 624
    事件的类型:Query
    事件发生时所在服务器执行此事件的线程的ID: thread_id=2 
    语句的时间戳与将其写入二进制日志文件中的时间差:exec_time=0
    错误代码:error_code=0
    设定事件发生时的时间戳:SET TIMESTAMP=1472608568/*!*/;
    事件内容:BEGIN
    中继日志:
    主从复制时,从服务器将主服务器的二进制日志先记录到中继日志中,再从中继日志中调到内存进行重放,完成主从复制。
    事务日志:
    事务型存储引擎innodb用于保证事务特性的日志文件,如果服务器突然断电,开启msyql后会根据事物日志中记录的内容进行提交和回滚操作。
    redo log 
    undo log 
    

    身体力行:怎么着运行和查看二进制日志

    [root@centos7 app]#mkdir -pv /app/logs/   ---创建一个目录用于存放二进制日志文件,也可以不创建,直接存放在数据目录下
    mkdir: created directory ‘/app/logs/’
    [root@centos7 app]#ls
    logs
    [root@centos7 app]#chown -R mysql:mysql /app/logs
    [root@centos7 app]#systemctl stop mariadb
    [root@centos7 app]#vim /etc/my.cnf.d/server.cnf 
    [server]
    skip_name_resolve = on
    innodb_file_per_table = on
    max_connections = 20000
    log_bin = /app/logs/bin-log   ---开启二进制日志,并指明日志文件的位置,如果直接写相对路径/bin-log,表示二进制日志保存在数据目录下
    [root@centos7 app]#systemctl start mariadb
    [root@centos7 logs]#ls  /app/logs  ----发现生成了两个文件,一个是二进制日志文件,一个是二进制文件的索引文件,正是因为有这个文件我们在执行show binary logs时候才能看到二进制文件的列表
    bin-log.000001  bin-log.index
    [root@centos7 logs]#!mysql
    mysql -uroot -pcentos
    MariaDB [(none)]> show binary logs;   ---查看二进制日志文件列表
    MariaDB [(none)]> show master status;  ---查看正在使用的二进制日志文件
    MariaDB [(none)]> flush logs;   ---让二进制日志文件滚动
    服务器端查看二进制日志文件的事件
    MariaDB [(none)]> show binlog events in 'bin-log.000001';  ---查看二进制日志文件中的事件
    MariaDB [hidb]> insert into students values(5,'ouyangfeng',70,'F','hamogong');
    MariaDB [hidb]> select * from students;
    MariaDB [hidb]> show binlog events in 'bin-log.000002';
    MariaDB [hidb]> show binlog events in 'bin-log.000002' from 313;   ---从哪个位置开始查看二进制日志文件的事件
    MariaDB [hidb]> show binlog events in 'bin-log.000002' from 313 limit 1;  ---从哪个位置开始并只显示1行
    客户端查看二进制日志文件的事件
    [root@centos7 logs]#mysqlbinlog bin-log.000002
    [root@centos7 logs]#mysqlbinlog -j 313 --stop-position 437 bin-log.000002   ---查看二进制文件从哪个位置开始从哪个位置结束
    [root@centos7 logs]#mysqlbinlog --start-datetime="2017-11-10 21:04:14" bin-log.000002    ---查看二进制文件从哪个时间开始
    运行时开启和关闭二进制日志
    MariaDB [hidb]> select @@session.sql_log_bin;  ---查看二进制日志已经开启
     ----------------------- 
    | @@session.sql_log_bin |
     ----------------------- 
    |                     1 |
     ----------------------- 
    1 row in set (0.00 sec)
    
    MariaDB [hidb]> set @@session.sql_log_bin=off;  ---关闭二进制日志
    Query OK, 0 rows affected (0.00 sec)
    MariaDB [hidb]> show session variables like "sql_log_bin";  ---也可用这种方式查看二进制文件是否关闭
     --------------- ------- 
    | Variable_name | Value |
     --------------- ------- 
    | sql_log_bin   | OFF   |
     --------------- ------- 
    

    为了保持数据的平安,须求定时对数码开始展览备份。备份的措施有很两种,效果也分裂样。一旦数据库中的数据出现了不当,就供给利用备份好的多寡进行复苏恢复生机。进而将损失降到最低。上面大家来打探一下MySQL常见的有三种备份复苏措施:

    基本功概念

    Linux下促成MySQL数据备份和大张旗鼓的下令使用全攻略,mysql数据备份

    为了维持数据的安全,需求定时对数码实行备份。备份的办法有为数非常的多种,效果也分化。一旦数据库中的数据出现了错误,就需求使用备份好的数码开始展览还原苏醒。进而将损失降到最低。上边大家来询问一下MySQL常见的有二种备份复苏措施:

    1、利用Mysqldump 二进制日志完结备份
    2、利用LVM快速照相 二进制日志完毕备份
    3、使用Xtrabackup备份

    一:实验碰到介绍:

    系统介绍:CentOS6.4_X64
    数据库版本:mysql-5.5.33

    二:基于Mysqldump命令达成备份恢复

    2.1、思路概念

    Mysqldump是一个逻辑备份命令;意思就是将数据库中的数据备份成一个文件文件;也能够说是将表的构造和数据存款和储蓄在文书文件中。

    Mysqldump命令的劳作规律很简短,它先摸清须要备份的表的布局,再在文书文件中变化二个CREATE语句。然后,将表中的保有记录调换为一条INSTERT语句。这个CREATE语句和INSTERT语句都以回复时选取的。还原数据时就足以接纳个中的CREATE语句来制造表。使用当中的INSERT语句来过来数据。它能够兑现全体服务器备份,也足以兑现单个或部分数据库、单个或部分表、表中的一些行、存款和储蓄进度、存款和储蓄函数、触发器的备份;何况能自动记录备份时刻的二进制日志文件及相应的地点。对于InnoDB存款和储蓄引擎来说扶助基于单事务情势实现热备,对于MyISAM则最多帮助温备。

    2.2、备份计谋

    Mysqldump全备 二进制日志增备

    2.3、进度达成

    (1)Mysqldump全备
    是因为Mysql数据库暗许的为MyISAM存款和储蓄引擎所以独有应用温备(备份相同的时间仅协助读哀告)实行,所以大家要为全体数据库增加读锁

    [[email protected] ~]
    #mysqldump -uroot -pmypass --lock-all-tables --master-data=2 --events --routines--all-databases > /zhao/database_`date  %F`.sql
    

    浅析:–lock-all-tables表示为有着表施加读锁;–master-data=2表示在备份文件中著录当前二进制日志的职位;–events表示备份数据的还要备份时间调节器代码;–routines表示备份数据的相同的时候备份存款和储蓄进程和仓库储存函数;–all-databases表示备份全体库。

    [[email protected] zhao]
    # less database_2013-08-13.sql
    --   
    #表示注释项
    -- Position to start replication or point-in-time recovery from
    --
    -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=14203; 
    #这里表示当前处于mysql-bin.000001这个二进制日志中,事件为14203这是通过--master-data=2产生的
    --
    -- Current Database: `hellodb`
    --
    CREATE DATABASE /*!32312 IF NOT EXISTS*/ `hellodb` /*!40100 DEFAULT CHARACTER SET utf8 */;
    

    (2)二进制全备

    艺术一: 导出二进制日志文件内容

    [[email protected] data]
    # mysqlbinlog mysql-bin.000001 >/zhao/binlog_`date  %F`.sql
    

    方法二:滚动日志复制文件

    mysql> flush logs; 
    #滚动日志
    [[email protected] data]
    # cp mysql-bin.000001 /zhao/mysql-bin.000001 #复制导出二进制文件
    

    (3)二进制增备
    第一添扩大少新闻

    mysql> use hellodb;
    mysql> INSERT INTO students(Name,Age,Gender,ClassID,TeacherID) values ('Yang kang',22,'M',3,3);
    

    下一场二进制增备

    [[email protected] data]
    # mysqlbinlog --start-position=14203 --stop-position=14527 mysql-bin.000001 > /zhao/binlog_`date  %F_%H`.sql
    

    深入分析:–start-position=14203是上次全备之后的二进制事件地点;–stop-position=14527目前一天的二进制事件地方。

    2.4、模拟数据库损坏,实现恢复生机专门的职业

    mysql> DROP DATABASE hellodb;    
    #删除数据库
    ############下面这些过程要在离线状态下执行############
    mysql> SET sql_log_bin=0;     
    #先关闭二进制日志
    mysql> flush logs;      
    #滚动日志
    [[email protected] ~]
    # mysql -uroot -pmypass < /zhao/database_2013-08-13.sql #导入数据库备份文件
    [[email protected] ~]
    # mysql -uroot -pmypass < /zhao/binlog_2013-08-13_19.sql #导入增量备份文件
    [[email protected] ~]
    # mysql -uroot –pmypass #登录查看,恢复完成
    mysql> SET sql_log_bin=1;
    

    这种备份格局苏醒简单,可是还原过来之后索引会出现错误要求重新建立,並且备份结果会并吞极大的上空,请酌定选择。

    PS:mysqldump常用命令小结 备份MySQL数据库的一声令下

    mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql
    

    备份MySQL数据库为带删除表的格式

    备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而无需手动删除原有数据库。

    mysqldump -–add-drop-table -uusername -ppassword databasename > backupfile.sql
    

    直接将MySQL数据库压缩备份

    mysqldump -hhostname -uusername -ppassword databasename | gzip > backupfile.sql.gz
    

    备份MySQL数据库某些(些)表

    mysqldump -hhostname -uusername -ppassword databasename specific_table1 specific_table2 > backupfile.sql
    

    还要备份多个MySQL数据库

    mysqldump -hhostname -uusername -ppassword –databases databasename1 databasename2 databasename3 > multibackupfile.sql
    

    单单备份数据库结构

    mysqldump –no-data –databases databasename1 databasename2 databasename3 > structurebackupfile.sql
    

    备份服务器上存有数据库

    mysqldump –all-databases > allbackupfile.sql
    

    光复MySQL数据库的通令

    mysql -hhostname -uusername -ppassword databasename < backupfile.sql
    

    借尸还魂压缩的MySQL数据库

    gunzip < backupfile.sql.gz | mysql -uusername -ppassword databasename
    

    将数据库转移到新服务器

    mysqldump -uusername -ppassword databasename | mysql –host=*.*.*.* -C databasename
    

    三、基于LVM快速照相达成备份苏醒

    3.1、思路明细

    (1)LVM这种备份格局必要Mysql的数量保存在逻辑卷上
    (2)必要给Mysql服务器施加读锁(mysql>FLUSH TABLES WITH READLOCK;),这里不足直接退出服务器
    (3)另起终点为数量所在的卷成立快照(lvcreate),保证专门的学业日志和数据文件必须在平等卷上(分别成立只怕会产生数据文件和业务日志不等同,进而或者导致无法不奇怪恢复)

    3.2、备份计谋

    LVM快速照相全备 二进制日志增备(对于即时点复苏还要恢复生机至连续的二进制地点)

    3.3、前提条件

    (1)成立逻辑卷及挂载逻辑卷,此进度在此就不做示范了

    (2)开首化mysql将其数量目录指向/mydata/data

    [[email protected] ~]
    # cd /usr/local/mysql/
    [[email protected] mysql]
    # scripts/mysql_install_db --user=mysql --datadir=/mydata/data
    

    (3)编辑查看配置文件,重启服务

    [[email protected] mysql]
    # vim /etc/my.cnf
    datadir = /mydata/data 
    #查看此项是否定义数据目录位置
    sync_binlog=1 
    #添加此项,每个事务提交时候,把事务日志从缓存区写到日志文件中,并且刷新日志文件的数据到磁盘上;
    [[email protected] mysql]
    # service mysqld start
    

    3.4、进程显得

    (1)确认保证业务日志和数据文件必须在平等卷上

    [[email protected] ~]
    # ls /mydata/data/
    hellodb  myclass   mysql-bin.000003 stu18.magedu.com.err
    ibdata1  mysql    mysql-bin.000004 stu18.magedu.com.pid
    ib_logfile0 mysql-bin.000001 mysql-bin.index  student
    ib_logfile1 mysql-bin.000002 performance_schema test
    

    解析:其中ib_logfile0与ib_logfile1是日记文件
    (2)施加全局锁并滚动日志

    mysql> FLUSH TABLES WITH READ LOCK;
    mysql> FLUSH LOGS;
    

    (3)查看并保留当前正值选取的二进制日志及当前进行二进制日志地点(相当的重大)

    mysql> SHOW MASTER STATUS;
     ------------------ ---------- -------------- ------------------ 
    | File    | Position | Binlog_Do_DB | Binlog_Ignore_DB |
     ------------------ ---------- -------------- ------------------ 
    | mysql-bin.000004 |  187 |    |     |
     ------------------ ---------- -------------- ------------------ 
    [[email protected] zhao]
    # mysql -uroot -pmypass -e 'SHOW MASTER STATUS;' >/zhao/lvmback-2013-08-14/binlog.txt
    

    (4)创设快速照相卷

    [[email protected] zhao]
    # lvcreate -L 100M -s -p r -n mydata-lvm /dev/vg1/mydata
    

    (5)马上切换终端释放锁

    mysql> UNLOCK TABLES;
    

    (6)备份数据

    [[email protected] data]
    # cp -a * /zhao/lvmback-2013-08-14/
    

    (7)二进制完成增量备份

    mysql> use hellodb;   
    #指定默认数据库
    Database changed
    mysql> CREATE TABLE testtb (id int,name CHAR(10));  
    #创建表
    Query OK, 0 rows affected (0.35 sec)
    mysql> INSERT INTO testtb VALUES (1,'tom');   
    #添加数据
    Query OK, 1 row affected (0.09 sec)
    [[email protected] data]
    # mysqlbinlog --start-position=187 mysql-bin.000004 > /zhao/lvmlogbin_2013-08-14/binlog.sql   #日志实现增量备份
    

    (8)模拟数据库崩溃

    [[email protected] ~]
    # service mysqld stop
    [[email protected] ~]
    # cd /mydata/data/
    [[email protected] data]
    # rm -rf *
    

    (9)复苏数据

    [[email protected] ~]
    # cp /zhao/lvmback-2013-08-14/* /mydata/data/ -a   #完全备份恢复
    [[email protected] ~]
    # cd /mydata/data/    #查看恢复数据内容
    [[email protected] data]
    # chown -R mysql.mysql * #更改属主属组
    [[email protected] data]
    # service mysqld start  #启动服务
    [[email protected] data]
    # mysql -uroot –pmypass #登录测试
    
    mysql> SHOW DATABASES;  
    #查看数据完整性,无测试表testtd使用二进制恢复
    mysql> SET sql_log_bin=0 
    #关闭二进制日志
    mysql> source /zhao/lvmlogbin_2013-08-14/binlog.sql; 
    #二进制恢复
    mysql> SHOW TABLES;   
    #查看恢复结果
     ------------------- 
    | Tables_in_hellodb |
     ------------------- 
    | classes   |
    | coc    |
    | courses   |
    | scores   |
    | students   |
    | teachers   |
    | testtb   |
    | toc    |
     ------------------- 
    mysql> SET sql_log_bin=1; 
    #开启二进制日志
    

    此工具是周边于热备的措施完毕的,而且用此措施来备份苏醒数据速度是足够快的。

    四:基于xtrabackup来达成备份恢复生机

    4.1、优势特色

    全盘以热备的款型展开,能够落到实处飞快可信赖地全盘备份和有些备份,帮忙增量备份,扶助时间点复苏,备份进程中不会干扰到事务操作,可以落到实处互连网传输和减弱作用由此使得的节约磁盘空间,备份完毕后可机关验证数据是不是可用,苏醒速度相当慢等等。越多优势特色请参考

    注意:以上这个优势特色只能在InnoDB引擎上圆满兑现,而在MyISAM存款和储蓄引擎上依然最七只可以选用温备的款型张开同临时候还不接济增量备份。
    别的Xtrabackup越来越多的高品级成效还依据于Mysql数据库对于InnoDB完成了单独的表空间,不然也就未有章程落到实处单表导入导出查看方式如下:

    mysql> SHOW GLOBAL VARIABLES LIKE 'innodb_file%';
     -------------------------- ---------- 
    | Variable_name   | Value |
     -------------------------- ---------- 
    | innodb_file_format  | Antelope |
    | innodb_file_format_check | ON  |
    | innodb_file_format_max | Antelope |
    | innodb_file_per_table | ON  |
     -------------------------- ---------- 
    

    其中的innodb_file_per_table为ON则表示落成了单表单空间。若为OFF则必要使用mysqldump全备然后改成配置文件删除原本的数据文件并再度起首化服务器最终将数据重复导入。所以建议之后在安装Mysql服务器时将其选拔暗许设置成1就能够(innodb_file_per_table = 1)。单表单空间的多寡体现方式为:

    [[email protected] hellodb]
    # ls
    classes.frm coc.MYD  courses.MYI scores.MYI teachers.frm testtb.ibd
    classes.MYD coc.MYI  db.opt  students.frm teachers.MYD toc.frm
    classes.MYI courses.frm scores.frm students.MYD teachers.MYI toc.MYD
    coc.frm  courses.MYD scores.MYD students.MYI testtb.frm toc.MYI
    

    4.2、安装Xtrabackup

    下载percona-xtrabackup最新的版本为2.1.4(percona-xtrabackup-2.1.4-656.rhel6.x86_64.rpm)
    安装:

    [[email protected] ~]
    # rpm -ivh percona-xtrabackup-2.1.4-656.rhel6.x86_64.rpm
    

    若有错误不能够安装请安装perl-DBD-mysql注重包

    [[email protected] ~]
    # yum -y install perl-DBD-mysql
    

    只顾:差异的境况依赖的涉及包也可以有八个,请依据提醒进行安插

    4.3、完全备份

    使用innobakupex备份时,其会调用xtrabackup备份全数的InnoDB表,复制全体有关表结构定义的有关文件(.frm)、以及MyISAM、MECR-VGE、CSV和ARC尖锐湿疣E表的连锁文书,同时还恐怕会备份触发器和数据库配置新闻相关的文件。这几个文件会被保留至五个以时日命令的目录中。完全备份命令如下:

    # innobackupex --user=DBUSER--password=DBUSERPASS /path/to/BACKUP-DIR/
    

    达成进度及表达:

    [[email protected] ~]
    # mkdir /innobackup    #创建备份文件目录
    [[email protected] ~]
    # innobackupex --user=root --password=mypass /innobackup/ #完全备份
    ################如果执行正确其后输出的几行信息通常如下###############
    xtrabackup: Transaction log of lsn (1604655) to (1604655) was copied. 
    #二进制日志的位置(lsn)
    130814 07:04:55 innobackupex: All tables unlocked
    innobackupex: Backup created in directory '/innobackup/2013-08-14_07-04-49'
    #备份文件保存的位置
    innobackupex: MySQL binlog position: filename 'mysql-bin.000003', position 538898
    130814 07:04:55 innobackupex: Connection to database server closed
    130814 07:04:55 innobackupex: completed
    

    OK!       备份达成
    切换至备份文件目录查看备份的数目新闻及创造生成的公文:

     [[email protected] ~]
    # cd /innobackup/2013-08-14_07-04-49/
    [[email protected] 2013-08-14_07-04-49]
    # ls
    backup-my.cnf myclass    student   xtrabackup_binlog_info
    hellodb  mysql    test    xtrabackup_checkpoints
    ibdata1  performance_schema xtrabackup_binary xtrabackup_logfile
    

    针对文件深入分析:

    (1)xtrabackup_checkpoints —— 备份类型(如完全或增量)、备份状态(如是不是曾经为prepared状态)和LSN(日志连串号)范围消息;
    种种InnoDB页(日常为16k大大小小)都会蕴藏三个日记类别号,即LSN。LSN是整套数据库系统的系统版本号,各个页面相关的LSN能够注解此页面近些日子是什么爆发变动的。
    (2)xtrabackup_binlog_info —— mysql服务器当前正在利用的二进制日志文件及至备份这一刻了结二进制日志事件的职分。
    (3)xtrabackup_binary —— 备份中用到的xtrabackup的可试行文件;
    (4)backup-my.cnf —— 备份时用到的安排选项新闻,也正是布署文件中有关mysqld的连锁文书配置;
    (5) xtrabackup_logfile —— 非文件文件是xtrabackup自己的日记文件;

    4.4、策画叁个完全备份

    一般情状下,在备份达成后,数据尚且不可能用来复苏操作,因为备份的数目中可能会蕴藏尚未提交的业务或已经付诸但尚未同步至数据文件中的事务。由此,此时数据文件仍居于不一样状态。“绸缪”的显要功能正是通过回滚未提交的事体及共同已经交付的政工至数据文件进而使得数据文件处于一致性状态。

    innobakupex命令的–apply-log选项可用于达成上述功用。如下边包车型地铁吩咐:

    [[email protected] ~]
    # innobackupex -apply-log /innobackup/2013-08-14_07-04-49/
    #############如果执行正确,其最后输出的几行信息通常如下################
    xtrabackup: starting shutdown with innodb_fast_shutdown = 1
    130814 7:39:33 InnoDB: Starting shutdown...
    130814 7:39:37 InnoDB: Shutdown completed; log sequence number 1606156
    130814 07:39:37 innobackupex: completed OK!
    

    4.5、模拟数据库崩溃实现完全苏醒

    (1)模拟崩溃

    [[email protected] ~]
    # service mysqld stop
    [[email protected] ~]
    # cd /mydata/data/
    [[email protected] data]
    # rm -rf *
    

    (2)从一丝一毫备份中回复数据(谨记:在平复数据此前千万不可初阶化数据库和起步服务)
    innobackupex命令的–copy-back选项用于实施复苏操作,其通过复制全部数占有关的文书至mysql服务器DATADI哈弗目录中来实行恢复生机进程。innobackupex通过backup-my.cnf来收获DATADIENCORE目录的连锁音讯。

    [[email protected] ~]
    # innobackupex --copy-back /innobackup/2013-08-14_07-04-49/
    #############如果执行正确,其最后输出的几行信息通常如下################
    innobackupex: Starting to copy InnoDB log files
    innobackupex: in '/innobackup/2013-08-14_07-04-49'
    innobackupex: back to original InnoDB log directory '/mydata/data'
    innobackupex: Copying '/innobackup/2013-08-14_07-04-49/ib_logfile0' to '/mydata/data'
    innobackupex: Copying '/innobackup/2013-08-14_07-04-49/ib_logfile1' to '/mydata/data'
    innobackupex: Finished copying back files.
    130814 07:58:22 innobackupex: completed OK!
    

    (3)当数据苏醒至数据目录之后,还索要保障全体数据文件的属主和属组均为不易的用户,如mysql,否则,在开发银行mysqld从前还须要事先修改数据文件的属主和属组。

    # chown -R mysql:mysql /mydata/data/
    

    (4)运维服务器登入查看恢复生机完毕。

    [[email protected] data]
    # service mysqld start
    

    留心:每叁回苏醒完成以后自然要重复做壹次完全备份职业!!

    4.6、使用innobackupex进行增量备份

    注脚:每一个InnoDB的页面都会含有多个LSN音信,每当相关的数额产生转移,相关的页面包车型地铁LSN就能自动增进。那多亏InnoDB表能够进行增量备份的基本功,即innobackupex通过备份上次统统备份之后发出变动的页面来兑现。
    率先次变动数据完结增量备份
    贯彻增量备份能够运用上边的一声令下进行:

    [[email protected] data]
    # innobackupex --user=root --password=mypass --incremental /innobackup --incremental-basedir=/innobackup/2013-08-14_08-14-12/
    

    里头,/innobackup指的是截然备份所在的目录,此命令实施完成后,innobackupex命令会在/backup目录中创立叁个新的以时日命名的目录以存放全数的增量备份数据。–incremental-basedir是指向上二遍完全备份所在的目录。

    第一回变动数据开始展览增量备份:

    [[email protected] ~]
    # innobackupex --user=root --password=mypass --incremental /innobackup --incremental-basedir=/innobackup/2013-08-14_08-29-05/
    

    第一回增量备份的实施命令和率先次差不离同样,独有其–incremental-basedir应该本着上三回的增量备份所在的目录。

    其一回变动数据还未开始展览增量备份

    mysql> delete from coc where id=14;
    

    4.7、使用innobackupex基于完全 增量 二进制日志复苏数据

    (1)由于小编这里将二进制日志和数据文件写在了同一个文件目录下所以在模仿数据库崩溃前必须先复制出二进制日志文件,所以提出看客们将数据目录和二进制目录分开存放,不要和小编一样犯如此二的荒唐。方法如下:
    前提是在刚刚营造服务器并未有运营服务器在此之前做如下操作;

    mkdir /mybinlog 
    #建立一目录用于存放二进制日志
    chown mysql:mysql /mybinlog 
    #更改权限
    vim /etc/my.cnf 
    #修改配置文件
    log-bin=/mybinlog/mysql-bin 
    #二进制日志目录及文件名前缀,添加之
    

    好了言归正传复制二进制日志文件:

    [[email protected] data]
    # cp mysql-bin.000001/innobackup/
    

    (2)模拟服务器崩溃

    [[email protected] ~]
    # service mysqld stop
    [[email protected] ~]
    # cd /mydata/data/
    [[email protected] data]
    # rm -rf *
    

    (3)盘算备份

    先是注意“企图”增量备份与整治完全备份有着一些不等,极其要细心的是:
    1)必要在各类备份(包蕴完全和一一增量备份)上,将早就交给的事务进行“回看”。“重放”之后,全部的备份数据将统一到完全备份上。
    2)基于全部的备份将未提交的业务进行“回滚”。

    一起备份“计划”

    [[email protected] ~]
    # innobackupex --apply-log --redo-only/innobackup/2013-08-14_08-14-12/
    

    首先次增量备份“妄想”约等于说将率先次增量备份合併到了一心备份中

    [[email protected] ~]
    # innobackupex --apply-log--redo-only /innobackup/2013-08-14_08-14-12/--incremental-dir=/innobackup/2013-08-14_08-29-05/
    

    首次增量备份“图谋”也正是说将第二遍增量备份也合併到了完全备份中

    [[email protected] ~]
    # innobackupex --apply-log--redo-only /innobackup/2013-08-14_08-14-12/ --incremental-dir=/innobackup/2013-08-14_09-08-39/
    

    中间 –redo-only是只将已交付的业务同步到数据文件中,未提交的业务日志不在进行回滚了。

    (4)苏醒数据(基于innobackupex基于完全 增量)

    [[email protected] ~]
    # innobackupex --copy-back/innobackup/2013-08-14_08-14-12/
    

    (5)改变属组属主

    [[email protected] ~]
    # cd /mydata/data/
    [[email protected] data]
    # chown -R mysql:mysql *
    

    (6)运行查看

    [[email protected] ~]
    # mysql -uroot -pmypas
    mysql> select * from coc;
     ---- --------- ---------- 
    | ID | ClassID | CourseID |
     ---- --------- ---------- 
    | 1|  1 |  2 |
    | 2|  1 |  5 |
    | 3|  2 |  2 |
    | 4|  2 |  6 |
    | 5|  3 |  1 |
    | 6|  3 |  7 |
    | 7|  4 |  5 |
    | 8|  4 |  2 |
    | 9|  5 |  1 |
    | 10 |  5 |  9 |
    | 11 |  6 |  3 |
    | 12 |  6 |  4 |
    | 13 |  7 |  4 |
    | 14 |  7 |  3 |
     ---- --------- ---------- 
    14 rows in set (0.00 sec)
    

    结果显示数据正确完好,但是第二遍的更换音讯未奏效。

    (7)基于二进制日志落成数据复苏
    查看最终二次增量备份二进制日志所在的职务:

    [[email protected] data]
    # cd /innobackup/2013-08-14_09-08-39/
    [[email protected] 2013-08-14_09-08-39]
    # cat xtrabackup_binlog_info
    mysql-bin.000001 780
    

    查看二进制日志文件将未备份数据的二进制日志导出

    [[email protected] innobackup]
    # mysqlbinlog mysql-bin.000001
    # at 780
    #130814 9:20:19 server id 1 end_log_pos 851 Query thread_id=7 exec_time=0 error_code=0
    SET TIMESTAMP=1376443219/*!*/;
    BEGIN
    /*!*/;
    # at 851
    #130814 9:20:19 server id 1 end_log_pos 944 Query thread_id=7 exec_time=0 error_code=0
    SET TIMESTAMP=1376443219/*!*/;
    delete from coc where id=14
    /*!*/;
    # at 944
    #130814 9:20:19 server id 1 end_log_pos 1016 Query thread_id=7 exec_time=0 error_code=0
    SET TIMESTAMP=1376443219/*!*/;
    COMMIT
    /*!*/;
    DELIMITER ;
    # End of log file
    ROLLBACK /* added by mysqlbinlog */;
    /*!50003 SET [email protected]_COMPLETION_TYPE*/;
    /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
    [[email protected] innobackup]
    # mysqlbinlog --start-position=780 mysql-bin.000001 > ./all.sql  #导出数据
    

    回复数据

    [[email protected] ~]
    # mysql -uroot –pmypass
    mysql> SET SQL_LOG_BIN=0;   
    #关闭二进制日志
    mysql> source /innobackup/all.sql 
    #导入数据
    mysql> SET SQL_LOG_BIN=1;   
    #开启二进制日志
    mysql> select * from coc;   
    #查看数据,恢复完成
     ---- --------- ---------- 
    | ID | ClassID | CourseID |
     ---- --------- ---------- 
    | 1 |  1 |  2 |
    | 2 |  1 |  5 |
    | 3 |  2 |  2 |
    | 4 |  2 |  6 |
    | 5 |  3 |  1 |
    | 6 |  3 |  7 |
    | 7 |  4 |  5 |
    | 8 |  4 |  2 |
    | 9 |  5 |  1 |
    | 10 |  5 |  9 |
    | 11 |  6 |  3 |
    | 12 |  6 |  4 |
    | 13 |  7 |  4 |
     ---- --------- ---------- 
    13 rows in set (0.00 sec)
    

    这种备份苏醒措施完全以热备的格局落到实处完全备份和增量备份和二进制日志还原数据,並且恢复生机速度也异常的快,是极品的备份复苏措施!!

    总结:以上三种备份复苏都是能够依赖二进制日志文件举办的,因此呈现出了二进制日志的重中之重,进而映射出了日记的基本点;所以读书查看使用日志文件是读书Mysql的首要!

    为了保全部据的安全,必要定期对数据开始展览备份。备份的主意有无数种,效...

    前言

    对此大家运营来讲,在mysql数据库领域,其他不说,最起码要会两大技能!

    先是大本事:备份与回复

    其次大技术:主从异步

    有关这两大技能大家先来讲说第四个

    2、mysql的备份和重振旗鼓

    1、 备份类型:

    • 备份的数据集的限量:
      完全备份和一部分备份
      全盘备份:整个数据集;
      一对备份:数据集的一局地,譬喻有个别数据库可能部分表;
    • 全量备份、增量备份、差距备份:
      全量备份:完全备份
      增量备份:仅备份自上三遍完全备份或增量备份以来变量的那部数据;
      差别备份:仅备份自上二回完全备份以来变量的那部数据;
    ![](https://upload-images.jianshu.io/upload_images/6854348-921c5720fdfe6362.png)
    
    无标题.png
    
    
    
    可以根据生产需要每月进行一次全量备份,每周或者每天进行一次增量或者差异备份
    
    • 概略备份、逻辑备份:
      物理备份:用cp只怕tar命令复制数据文件实行的备份,物理备份的进度快
      逻辑备份:利用客户端工具通过mysql协议连接到数据库,并从数据库导出数据另存在贰个或五个文本中;
    • 基于数据服务是不是在线:
      热备:读写操作均可进行的图景下所做的备份;
      温备:可读但不可写情形下实行的备份;
      冷备:读写操作均不可进行的情形下所做的备份;
    • 备份战术:
      全量 差异 binlog
      全量 增量 binlog
      备份花招:物理、逻辑
      相似景况下利用物理热备
    • 备份工具:
      ①mysqldump:mysql服务自带的备份工具;逻辑备份工具;
      统统、部分备份;
      新葡亰496net:备份与还原,备份和还原。InnoDB:热备;
      MyISAM:温备;
      cp/tar
      ②lvm2:逻辑卷,快速照相(央浼三个大局锁),之后随即释放锁,达到差不离热备的职能;物理备份;
      专注:不能够仅备份数据文件;要同一时候备份工作日志;
      前提:要求数据文件和事业日志位于同三个逻辑卷;
      ③xtrabackup:
      由Percona提供,开源工具,协助对InnoDB做热备,物理备份工具;
      全盘备份、部分备份;
      一同备份、增量备份;
      完全备份、差别备份;
    • 备份机制:
      xtrabackup:
      全量 差异 binlog
      全量 增量 binlog
      mysqldump:数据十分小的时候使用
      全量 binlog
    • 备份什么?
      数据
      二进制日志、InnoDB的事情日志;
      代码(存款和储蓄进度、存款和储蓄函数、触发器、事件调解器)
      服务器的布署文件
    • mysqldump的用法
      逻辑备份工具:基于mysql客户端协议
      一心备份、部分备份;
      InnoDB:热备或温备;
      MyISAM:温备;
      三遍封装工具:
      mydumper
      phpMyAdmin
      Usage:
      mysqldump [OPTIONS] database [tables] # 备份单库,能够只备份在那之中的一局地表(部分备份);
      OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] # 备份多库;
      OR mysqldump [OPTIONS] --all-databases [OPTIONS] # 备份全部库;
      MyISAM存储引擎:援救温备,备份时要锁定表;
      -x, --lock-all-tables:锁定全数库的有所表,读锁;
      -l, --lock-tables:锁定钦点库全部表;
      InnoDB存款和储蓄引擎:支持温备和热备;
      --single-transaction:创立三个工作,基于此快速照相施行备份,相当于展开八个大的东西,在REPEATABLE-READ的事物隔开分离品级下,外人改动了付出了您也看不到,此刻备份时能够确定保证各事物的小时点一样,不然备份的进度中别人恐怕在更换数据,就能够变成各事物的修改时间不是在同期,使备份不可用;
      别的选项:
      -普拉多, --routines:备份钦命库的贮存进程和仓库储存函数;
      --triggers:备份钦命库的触发器;
      -E, --events:备份事件调度器
      --master-data[=#]:指明备份时二进制日志文件的名字和所处的义务,备份之后的数额就可以从二进制日志文件的这里地点进行重播
      1:记录为CHANGE MASTE福睿斯 TO语句,此语句不被讲明;
      2:记录为CHANGE MASTECRUISER TO语句,此语句被疏解;
      --flush-logs:备份的还要开始展览滚动二进制日志;
    • Xtrabackup的用法:
      MyISAM:温备,不帮忙增量备份;
      InnoDB:热备,增量;
      大意备份,速率快、可信;备份完成后自行校验备份结果集是或不是可用;还原速度快;
      Usage: [innobackupex [--defaults-file=#] --backup | innobackupex [--defaults-file=#] --prepare] [OPTIONS]
      备份 --> 应用日志 --> 还原
      应用日志:--apply-log
      还原:--copy-back
      统统备份:
      完全 binlog(总结):
      备份:innobackupex --user --password= --host= /PATH/TO/BACKUP_DIR
      准备:innobackupex --apply-log /PATH/TO/BACKUP_DIR
      恢复:innobackupex --copy-back
      瞩目:--copy-back须求在mysqld主机本地开始展览,mysqld服务不能够开发银行;
      innodb_log_file_size恐怕要再度设定;
      亲自过问1:使用mysqldump对innodb引擎的数据库进行全量 binlog热备
    实验环境:172.18.21.107做为正常运行的mysql服务器,172.18.21.7做为备份的主机,把172.18.21.107的mysql数据备份到本机
    1、在172.18.21.107上开启二进制日志并启动mariadb服务
    vim /etc/my.cnf.d/server.cnf 
    log_bin = /app/logs/bin-log ---开启二进制日志
    systemcatl start mariadb
    2、在172.18.21.7上进行一次全量备份
    [root@redhat7 ~]#mysqldump -uroot -pcentos -h172.18.21.107 --single-transaction -R --triggers -E --master-data=2 --flush-logs --databases hidb > /app/hidb-`date " %F-%T"`.sql
    [root@redhat7 ~]#cd /app
    [root@redhat7 app]#ls
    hidb-2017-11-11-08:42:11.sql  
    [root@redhat7 app]#less hidb-2017-11-11-08:42:11.sql ---可以看到备份时二进制日志的名字和所处位置
    3、在172.18.21.107上插入一个字段、删除一个字段,这些变化都是在全量备份之后进行的数据修改
    MariaDB [hidb]> select * from  students;
     ---- ------------ ------ -------- ------------------- 
    | id | name       | age  | gender | major             |
     ---- ------------ ------ -------- ------------------- 
    |  1 | yangguo    |   25 | F      | anranxiaohuizhang |
    |  2 | xiaolongnv |   30 | M      | yunvjian          |
    |  3 | guojing    |   50 | F      | xianglong         |
    |  4 | huangrong  |   45 | M      | dagoubang         |
    |  5 | ouyangfeng |   70 | F      | hamogong          |
     ---- ------------ ------ -------- ------------------- 
    MariaDB [hidb]> insert into students 
    MariaDB [hidb]> delete from students where id=5;
    Query OK, 1 row affected (0.00 sec)
    
    MariaDB [hidb]> select * from  students;
     ---- ------------ ------ -------- ------------------- 
    | id | name       | age  | gender | major             |
     ---- ------------ ------ -------- ------------------- 
    |  1 | yangguo    |   25 | F      | anranxiaohuizhang |
    |  2 | xiaolongnv |   30 | M      | yunvjian          |
    |  3 | guojing    |   50 | F      | xianglong         |
    |  4 | huangrong  |   45 | M      | dagoubang         |
    |  6 | aobama     |   58 | F      | presedent         |
     ---- ------------ ------ -------- ------------------- /
    4、将全量备份之后发生的数据改变的二进制日志重定向到一个文件中
    [root@centos7 logs]#mysqlbinlog -j 245 bin-log.000005 > /app/binlog.sql
    [root@centos7 logs]#scp /app/binlog.sql 172.18.21.7:/app
    5、在172.18.21.7上进行恢复操作
    systemctl start mariadb   ---注意恢复时不要开启二进制日志,不然会将恢复过程中执行的大量SQL语句记录到二进制日志中
    [root@redhat7 app]#mysql < hidb-2017-11-11-08:42:11.sql   ---读取全量备份的内容
    [root@redhat7 app]#mysql < binlog.sql    ---读取全量备份之后二进制日志中的内容
    [root@redhat7 app]#mysql
    MariaDB [(none)]> show databases;  ---可以看到备份的数据库
    MariaDBMariaDB [hidb]> select * from students;  ---发现和172.18.21.107上的一样,备份恢复成功
     ---- ------------ ------ -------- ------------------- 
    | id | name       | age  | gender | major             |
     ---- ------------ ------ -------- ------------------- 
    |  1 | yangguo    |   25 | F      | anranxiaohuizhang |
    |  2 | xiaolongnv |   30 | M      | yunvjian          |
    |  3 | guojing    |   50 | F      | xianglong         |
    |  4 | huangrong  |   45 | M      | dagoubang         |
    |  6 | aobama     |   58 | F      | presedent         |
     ---- ------------ ------ -------- ------------------- 
     [(none)]> use hidb;
    

    在percona官网上下载xtrabackup及备份譬喻

    https://www.percona.com/
    [root@centos7 app]#yum install  percona-xtrabackup-24-2.4.8-1.el7.x86_64.rpm
    [root@centos7 app]#rpm -ql percona-xtrabackup-24
    /usr/bin/innobackupex  ---innobackupex工具是为了兼容oracle官方innobackup,将xtrabackup进行二次封装,此工具支持客户端远程连接进行备份,所以一般使用这个工具进行备份
    /usr/bin/xtrabackup
    [root@centos7 app]#mkdir /app/backups  ---在本机创建一个备份的目录
    [root@centos7 app]#innobackupex --user=root --password=centos --host=172.18.21.107 /app/backups  ---将整个数据库备份到/app/backups目录下,也可以用--databases 指明只备份某个数据库
    [root@centos7 app]#cd backups/
    [root@centos7 backups]#ls  ---发现有一个和时间相关的备份目录
    2017-11-11_09-50-40
    [root@centos7 backups]#cd 2017-11-11_09-50-40
    [root@centos7 2017-11-11_09-50-40]#ll
    total 18460
    -rw-r----- 1 root root      417 Nov 11 09:50 backup-my.cnf   ---配置文件的备份
    drwxr-x--- 2 root root       60 Nov 11 09:50 hidb
    -rw-r----- 1 root root 18874368 Nov 11 09:50 ibdata1  ---表空间文件备份
    drwxr-x--- 2 root root     4096 Nov 11 09:50 mysql
    drwxr-x--- 2 root root     4096 Nov 11 09:50 performance_schema
    drwxr-x--- 2 root root       20 Nov 11 09:50 test
    -rw-r----- 1 root root       19 Nov 11 09:50 xtrabackup_binlog_info ---备份了二进制文件的名字和备份时所处的位置
    -rw-r----- 1 root root      113 Nov 11 09:50 xtrabackup_checkpoints  ---记录了备份自己的属性
    -rw-r----- 1 root root      491 Nov 11 09:50 xtrabackup_info  ---记录了使用工具的版本及连接到服务器时使用的选项等
    -rw-r----- 1 root root     2560 Nov 11 09:50 xtrabackup_logfile  ---xtrbackup执行的日志信息,看不了,是个二进制文件
    [root@centos7 2017-11-11_09-50-40]#cat  xtrabackup_checkpoints
    backup_type = full-backuped    ---备份类型是全量备份
    from_lsn = 0
    to_lsn = 2241248
    last_lsn = 2241248   ---从哪个日志序列号开始备份到哪个日志序列号结束备份,数据和索引在表空间里保存的时候的编号称为日志序列号
    compact = 0  ----是否打包
    recover_binlog_info = 0   ---二进制日志保存的时候是否有未完成的事物需要回滚的,0表示没有
    

    采纳Xtrabackup对innodb引擎的数据库进行全量 增量 binlog热备

    实验环境:172.18.21.107为工作数据库服务器,在172.18.21.7进行恢复操作,在172.18.21.107上开启二进制日志
    在两个主机上都要安装xtrabackup工具
    1、在172.18.21.7上准备一个干净的mariadb数据库服务器,设置如下
    [root@redhat7 app]#systemctl stop mariadb
    [root@redhat7 app]#rm -rf /var/lib/mysql/*
    2、在172.18.21.107上进行一次全量备份
    [root@centos7 app]#mkdir /app/backups  ---创建一个目录做为备份的目录
    [root@centos7 app]#innobackupex --user=root --password=centos --host=172.18.21.107 /app/backups/
    [root@centos7 app]#cd backups/
    [root@centos7 backups]#ls
    2017-11-11_16-29-15
    3、在172.18.21.107上进行一次数据修改
    MariaDB [hidb]> select * from students;
     ---- ----------- ------ -------- ------- 
    | id | name      | age  | gender | major |
     ---- ----------- ------ -------- ------- 
    |  1 | stu1      |   66 | M      | NULL  |
    |  2 | stu2      |   30 | F      | NULL  |
    |  3 | stu3      |   18 | M      | NULL  |
    |  4 | stu4      |   45 | F      | NULL  |
    |  5 | stu5      |   54 | F      | NULL  |
    |  6 | stu6      |   97 | F      | NULL  |
    |  7 | stu7      |   53 | M      | NULL  |
    |  8 | stu8      |   98 | M      | NULL  |
    |  9 | stu9      |   30 | M      | NULL  |
    | 10 | stu10     |   19 | F      | NULL  |
    | 11 | yangguo   |   30 | M      | NULL  |
    | 12 | xiaolognv |   37 | F      | NULL  |
     ---- ----------- ------ -------- ------- 
    12 rows in set (0.00 sec)
    
    MariaDB [hidb]> delete from students where id=11; 
    Query OK, 1 row affected (0.01 sec)
    
    MariaDB [hidb]> delete from students where id=12; 
    Query OK, 1 row affected (0.01 sec)
    
    MariaDB [hidb]> select * from students;
     ---- ------- ------ -------- ------- 
    | id | name  | age  | gender | major |
     ---- ------- ------ -------- ------- 
    |  1 | stu1  |   66 | M      | NULL  |
    |  2 | stu2  |   30 | F      | NULL  |
    |  3 | stu3  |   18 | M      | NULL  |
    |  4 | stu4  |   45 | F      | NULL  |
    |  5 | stu5  |   54 | F      | NULL  |
    |  6 | stu6  |   97 | F      | NULL  |
    |  7 | stu7  |   53 | M      | NULL  |
    |  8 | stu8  |   98 | M      | NULL  |
    |  9 | stu9  |   30 | M      | NULL  |
    | 10 | stu10 |   19 | F      | NULL  |
     ---- ------- ------ -------- ------- 
    10 rows in set (0.00 sec)
    
    4、在172.18.21.107中基于上一次全量的基础上进行一次增量备份
    [root@centos7 backups]#innobackupex --user=root --password=centos --host=172.18.21.107  --incremental /app/backups/ --incremental-basedir=/app/backups/2017-11-11_16-29-15
    [root@centos7 backups]#ls
    2017-11-11_16-29-15  2017-11-11_16-32-49
    5、在172.18.21.107上再进行一次数据修改
    MariaDB [hidb]> insert into students (name,age,gender)values('xiaolognv',37,'F');
    Query OK, 1 row affected (0.01 sec)
    MariaDB [hidb]> select * from students;
     ---- ----------- ------ -------- ------- 
    | id | name      | age  | gender | major |
     ---- ----------- ------ -------- ------- 
    |  1 | stu1      |   66 | M      | NULL  |
    |  2 | stu2      |   30 | F      | NULL  |
    |  3 | stu3      |   18 | M      | NULL  |
    |  4 | stu4      |   45 | F      | NULL  |
    |  5 | stu5      |   54 | F      | NULL  |
    |  6 | stu6      |   97 | F      | NULL  |
    |  7 | stu7      |   53 | M      | NULL  |
    |  8 | stu8      |   98 | M      | NULL  |
    |  9 | stu9      |   30 | M      | NULL  |
    | 10 | stu10     |   19 | F      | NULL  |
    | 13 | xiaolognv |   37 | F      | NULL  |
     ---- ----------- ------ -------- ------- 
    
    6、在172.18.21.107中在上一次增量备份的基础上进行增量备份
    [root@centos7 backups]#innobackupex --user=root --password=centos --host=172.18.21.107  --incremental /app/backups/ --incremental-basedir=/app/backups/2017-11-11_16-32-49
    [root@centos7 backups]#ls
    2017-11-11_16-29-15  2017-11-11_16-32-49  2017-11-11_16-34-56
    [root@centos7 backups]#cd 2017-11-11_16-34-56
    [root@centos7 2017-11-11_16-34-56]#ls
    backup-my.cnf  ibdata1.delta  mysql               test                    xtrabackup_checkpoints  xtrabackup_logfile
    hidb           ibdata1.meta   performance_schema  xtrabackup_binlog_info  xtrabackup_info
    [root@centos7 2017-11-11_16-34-56]#cat xtrabackup_checkpoints 
    backup_type = incremental   ---后面两次备份的类型都是增量备份
    from_lsn = 1617586
    to_lsn = 1617886
    last_lsn = 1617886
    compact = 0
    [root@centos7 2017-11-11_16-34-56]#cat xtrabackup_binlog_info  ---最后一次备份时二进制日志所处的位置
    bin-log.000001  875
    7、在172.18.21.107上进行数据修改
    MariaDB [hidb]> insert into students (name,age,gender,major)values('ouyangfeng',55,'F','hamogong');
    Query OK, 1 row affected (0.00 sec)
    
    MariaDB [hidb]> select * from students;
     ---- ------------ ------ -------- ---------- 
    | id | name       | age  | gender | major    |
     ---- ------------ ------ -------- ---------- 
    |  1 | stu1       |   66 | M      | NULL     |
    |  2 | stu2       |   30 | F      | NULL     |
    |  3 | stu3       |   18 | M      | NULL     |
    |  4 | stu4       |   45 | F      | NULL     |
    |  5 | stu5       |   54 | F      | NULL     |
    |  6 | stu6       |   97 | F      | NULL     |
    |  7 | stu7       |   53 | M      | NULL     |
    |  8 | stu8       |   98 | M      | NULL     |
    |  9 | stu9       |   30 | M      | NULL     |
    | 10 | stu10      |   19 | F      | NULL     |
    | 13 | xiaolognv  |   37 | F      | NULL     |
    | 14 | ouyangfeng |   55 | F      | hamogong |
     ---- ------------ ------ -------- ---------- 
    
    此时此服务器荡机了,但二进制日志保存完好
    [root@centos7 app]#mysqlbinlog -j 875 /app/logs/bin-log.000001> /app/binlog.sql    ---将最后一次增量备份到荡机时刻的二进制日志保存到一个文件中
    8、在172.18.21.107上进行恢复前的prepare操作
    [root@centos7 app]# cd 2017-11-11_16-29-15
    [root@centos7 2017-11-11_16-29-15]#innobackupex --apply-log --redo-only ./  ---将全量备份中未完成的事物进行redo
    [root@centos7 2017-11-11_16-29-15]#innobackupex --apply-log --redo-only ./ --incremental-dir=/app/backups/2017-11-11_16-32-49    ---将第一个增量备份合并到全量上,并将增量备份中未完成的事物进行redo
    [root@centos7 2017-11-11_16-29-15]#innobackupex --apply-log --redo-only ./ --incremental-dir=/app/backups/2017-11-11_16-34-56   ---将第而个增量备份合并到全量上,并将增量备份中未完成的事物进行redo
    [root@centos7 2017-11-11_16-29-15]#innobackupex --apply-log  ./    ---最后对全量备份和增量备份中未提交的事物进行回滚,如果没有增量备份,则不用合并直接对全量备份中未提交的事物进行回滚
    [root@centos7 2017-11-11_16-29-15]#cat xtrabackup_checkpoints 
    backup_type = full-prepared   ---发现已经准备完毕
    from_lsn = 0
    to_lsn = 1617886
    last_lsn = 1617886
    compact = 0
    [root@centos7 backups]#scp -r 2017-11-11_16-29-15 172.18.21.7:/app  ---把合并好的全量备份文件拷贝到要恢复的主机
    [root@centos7 app]#scp binlog.sql 172.18.21.7:/app   ---将准备好的二进制文件也拷贝到要恢复的主机
    9、在172.18.21.7上进行恢复操作
    [root@redhat7 app]#cd 2017-11-11_16-29-15
    [root@redhat7 2017-11-11_16-29-15]#innobackupex --copy-back ./    ---将全量备份的目录中的内容拷贝到mariadb对应的目录下
    [root@redhat7 2017-11-11_16-29-15]#cd /var/lib/mysql/
    [root@redhat7 mysql]#ls ---发现对应的目录已经生成
    hidb  ibdata1  ib_logfile0  ib_logfile1  mysql  performance_schema  test  xtrabackup_binlog_pos_innodb  xtrabackup_info
    [root@redhat7 mysql]#chown -R mysql:mysql ./*   ---修改这个目录的属主和属组
    [root@redhat7 mysql]#systemctl start mariadb   
    ---开启服务,这里需要注意,有的时候开启不了,需要修改innodb_log_file_size的值为48M,可以根据日志中提示的进行修改,只要在配置文件加上这条就可以了,但此处却不可以增加,因为和ib_logfile0  ib_logfile1 这两个事物日志文件冲突
    [root@redhat7 app]#mysql < binlog.sql  ---将最后一次增量备份到服务器荡机时间段的二进制日志进行重放,此处本机不要启动二进制日志
    二进制日志重放时也可以采用如下方法
    [root@redhat7 app]#cp binlog.sql /tmp/   ---复制到tmp目录下保证所有用户都可读
    [root@redhat7 app]#mysql -uroot -pcentos -h172.18.21.107
    MariaDB [(none)]> select @@session.sql_log_bin;
     ----------------------- 
    | @@session.sql_log_bin |
     ----------------------- 
    |                     1 |
     ----------------------- 
    MariaDB [(none)]> set  @@session.sql_log_bin=off;   ---关闭二进制日志
    Query OK, 0 rows affected (0.00 sec)
    
    MariaDB [(none)]> select @@session.sql_log_bin;
     ----------------------- 
    | @@session.sql_log_bin |
     ----------------------- 
    |                     0 |
     ----------------------- 
    MariaDB [(none)]> . /tmp/bin-log.sql   ---source这个脚本文件到数据库中
    MariaDB [hidb]> select * from students;    ---发现恢复完成
     ---- ------------ ------ -------- ---------- 
    | id | name       | age  | gender | major    |
     ---- ------------ ------ -------- ---------- 
    |  1 | stu1       |   66 | M      | NULL     |
    |  2 | stu2       |   30 | F      | NULL     |
    |  3 | stu3       |   18 | M      | NULL     |
    |  4 | stu4       |   45 | F      | NULL     |
    |  5 | stu5       |   54 | F      | NULL     |
    |  6 | stu6       |   97 | F      | NULL     |
    |  7 | stu7       |   53 | M      | NULL     |
    |  8 | stu8       |   98 | M      | NULL     |
    |  9 | stu9       |   30 | M      | NULL     |
    | 10 | stu10      |   19 | F      | NULL     |
    | 13 | xiaolognv  |   37 | F      | NULL     |
    | 14 | ouyangfeng |   55 | F      | hamogong |
     ---- ------------ ------ -------- ---------- 
    

    小心:--copy-back必要在要过来的mariadb主机本地开展,何况不可能开行mariadb服务;innodb_log_file_size大概要双重设定并且大概和东西日志冲突,此时就绝不在布局文件中设定了。

    1、利用Mysqldump 二进制日志完成备份
    2、利用LVM快速照相 二进制日志实现备份
    3、使用Xtrabackup备份

    为啥要备份?

    • 灾害苏醒: 硬件故障,软件故障,自然磨难,红客攻击,误操作;
    • 测试:

    备份与回复

    备份:我们准时定点来备份数据,当下数码最值钱,所以大家要有限帮助数量的安全。

    日常大家都是7天一大备,三日六头一小备,也正是说,一周来二个全然备份,1、2、天来二个增量或差别备份。

    担保这天服务器宕机或误操作,能恢复过来。

    过来:当服务器负重过量会形成宕机,或临时大家误操作,删除了某张首要的数据表等等,那时候就要动用大家事先备份的多少来还原。

    粗略说下备份的类型,

    冷备:读写操作均不足实行

    温备:读操作可实行;但写操作不可实践

    热备:读写操作均可进行

    MyISAM:温备,不协助热备
    InnoDB: 都支持

    总结说下常用的备份工具,

    LVM的快速照相:先加锁,做快照后解锁,差十分的少热备;借助文件系统工具进行备份

    mysqldump:逻辑备份工具,适用全部存款和储蓄引擎,温备;匡助完全或局地备份;对InnoDB存款和储蓄引擎帮助热备,结合binlog的增量备份

    xtrabackup:由Percona提供支撑对InnoDB做热备(物理备份)的工具,匡助完全备份、增量备份

    备考:以上除了xtrabackup,都以依赖完整备份包以及二进制日志来平复数据库的,二进制日志记录了增加和删除改语句的操作指令,拿过来重播,

    3、mysql的主从复制

    主从复制时,从服务器开启一个io_thread线程连接到主服务器,将主服务器二进制日志中著录的内容保留到本机的连通日志中,复制时从服务器开启多个sql_thread线程,将衔接日志中的内容读到内部存储器中张开重播,完结复制操作。
    实行进程如下:

    172.18.21.107为主,172.18.21.7为从
    1、在主和从上都进行的设置
    [root@centos7 app]#systemctl stop mariadb
    [root@centos7 app]#rm -rf /var/lib/mysql/*
    2、在主上的设置
    [root@centos7 app]#vim /etc/my.cnf.d/server.cnf 
    [server]
    skip_name_resolve = on
    innodb_file_per_table = on
    max_connections = 20000
    log_bin = bin-log   ---启动二进制日志,这里写的是相对路径,相对于数据目录/var/lib/mysql
    server_id = 1
    [root@centos7 app]#systemctl start mariadb
    3、在从上的设置
    [root@redhat7 mysql]#vim /etc/my.cnf.d/server.cnf 
    [server]
    skip_name_resolve = on
    innodb_file_per_table = on
    max_connections = 20000
    server_id = 2   ---设置一个服务器的id
    relay_log = relay-log   ---启动中继日志
    [root@redhat7 mysql]#systemctl start mariadb
    4、同步两个服务器的时间,如果没有设置skip_name_resolve = on,还要保证两个主机能互相解析主机名
    5、在主服务器上授权一个用户用于复制操作
    [root@centos7 app]#mysql
    MariaDB [(none)]> grant replication client,replication slave on *.* to repluser@'172.18.%.%' identified by 'centos';
    MariaDB [(none)]> flush privileges;
    MariaDB [(none)]> show master status;  ---查看正在使用的二进制日志
     ---------------- ---------- -------------- ------------------ 
    | File           | Position | Binlog_Do_DB | Binlog_Ignore_DB |
     ---------------- ---------- -------------- ------------------ 
    | bin-log.000001 |      492 |              |                  |
     ---------------- ---------- -------------- ------------------ 
    6、在从服务器上的设置
    [root@redhat7 mysql]#mysql
    MariaDB [(none)]> help change master to   ---可以查看一下帮助,看一下change master to 的选项
    MariaDB [(none)]> change master to master_host='172.18.21.107',master_user='repluser',master_password='centos',master_log_file='bin-log.000001',master_log_pos=492;
    MariaDB [(none)]> show slave status G   ---可以查看从服务器的一些状态信息
    MariaDB [(none)]> start slave io_thread,sql_thread;  ---启动从服务器,可以直接写start slave,表示两个线程都启动
    MariaDB [(none)]> show slave status G
    7、在主服务器上创建一个数据库
    MariaDB [(none)]> create database mydb;
    8、在从上可以发现复制成功
    MariaDB [(none)]> show databases;
     -------------------- 
    | Database           |
     -------------------- 
    | information_schema |
    | mydb               |    ---可以看到主服务器上创建的数据库,说明主从复制成功
    | mysql              |
    | performance_schema |
    | test               |
     -------------------- 
    MariaDB [(none)]> show slave status G
    

    计算:就算主服务器已经运维一段时间了,要想实现主从复制,先对主服务器进行一个全然备份,然后在从服务器上举行苏醒,使双边的多少达到平等后在开启主从复制功用。从服务器一般要启用read_only=ON,表示只允许读,但只对那个从没supper权限的用户有效,举个例子对于有着root权限的用户还能够写的。

    一:实验遭遇介绍:

    要点:

    • 能容忍最多有失多少多少;
    • 出山小草数据需求在多久内成功;
    • 亟待还原哪些数据;
    1. 做还原测量检验,用于测验备份的可用性;
    2. 过来演练;

    提出:建议二进制日志和数据文件分开寄放

    1、关闭互连网链接,只监听本地端口访谈,(在备份还原的时候用)

    skip-networking=1

    2、禁止主机名分析,ip地址访谈的时候,禁止反向深入分析(提议加上)

    skip_name_resolve = on

    3、各种表单独使用一个表空间存款和储蓄表的数额和目录(提出加上)

    innodb_file_per_table = on

    4、开启并点名二进制文件寄放位置

    log_bin=/...

    。。。

    4、实现mysql主主复制

    在三个服务器上都要开启二进制日志和联网日志
    设若多个服务器的数据库id运维自动增加功用,要在安排文件中装置贰个的id为奇数,别的三个的id为偶数,只怕二个的id为偶数,其他多少个的id为奇数,因为就算不这么设置,有异常的大或许五个服务器上同一时间都有用户在写的时候会发生一样的id号形成争辩,所以一般情形下不提出数据库的id号启用自动增加效用,恐怕用id生成器进行改造。
    实行进度如下:

    实验环境有两台主机172.18.21.107为a和172.18.21.7为b
    1、在a和b服务器上都关闭数据库服务
    [root@redhat7 mysql]#systemctl stop mariadb
    2、在a服务器上的设置
    [root@centos7 app]#vim /etc/my.cnf.d/server.cnf 
    [server]
    skip_name_resolve = on
    innodb_file_per_table = on
    max_connections = 20000
    log_bin = bin-log   ---开启二级制日志
    relay_log = relay-log   ---开启中继日志
    server_id = 1
    auto_increment_offset = 1   ---表示id号从1开始
    auto_increment_increment = 2  ---表示以2为步进,即为奇数
    [root@centos7 app]#systemctl start mariadb
    3、在b服务器上的设置
    [root@redhat7 mysql]#vim /etc/my.cnf.d/server.cnf 
    [server]
    skip_name_resolve = on
    innodb_file_per_table = on
    max_connections = 20000
    server_id = 2
    relay_log = relay-log
    log_bin = bin-log
    auto_increment_offset = 2
    auto_increment_increment = 2
    [root@redhat7 mysql]#systemctl start mariadb
    4、在a服务器上的设置
    [root@centos7 app]#mysql
    MariaDB [(none)]> show master status; ---查看二进制日志的名字和位置
     ---------------- ---------- -------------- ------------------ 
    | File           | Position | Binlog_Do_DB | Binlog_Ignore_DB |
     ---------------- ---------- -------------- ------------------ 
    | bin-log.000002 |      245 |              |                  |
     ---------------- ---------- -------------- ------------------ 
    MariaDB [(none)]> select user,password,host from mysql.user;  ---查看一下是否有授权的用户用于主从复制
    5、在b服务器上的设置
    [root@redhat7 mysql]#mysql
    MariaDB [(none)]> show master status;
     ---------------- ---------- -------------- ------------------ 
    | File           | Position | Binlog_Do_DB | Binlog_Ignore_DB |
     ---------------- ---------- -------------- ------------------ 
    | bin-log.000001 |      245 |              |                  |
     ---------------- ---------- -------------- ------------------ 
    MariaDB [(none)]> select user,password,host from mysql.user;
    MariaDB [mydb]> grant replication client,replication slave on *.* to 'repluser'@'172.18.%.%' identified by 'centos';   ---发现b服务器上没有授权的用于主从复制的用户,所以授权一个用户
    6、在a上的设置
    MariaDB [mydb]> change master to master_host='172.18.21.7',master_user='repluser',master_password='centos',master_log_file='bin-log.000001',master_log_pos=245;
    MariaDB [mydb]> start slave;
    MariaDB [mydb]> show slave status G
    7、在b上的设置
    MariaDB [mydb]> change master to master_host='172.18.21.107',master_user='repluser',master_password='centos',master_log_file='bin-log.000002',master_log_pos=245;
    MariaDB [mydb]> start slave;
    MariaDB [mydb]> show slave status G
    8、测试
    在a和b上查看一下
    MariaDB [mydb]> select * from students;  ---刚开始是相同的
     ---- ------- ------ -------- ------- 
    | id | name  | age  | gender | major |
     ---- ------- ------ -------- ------- 
    |  1 | stu1  |   76 | F      | NULL  |
    |  2 | stu2  |   28 | M      | NULL  |
    |  3 | stu3  |   42 | F      | NULL  |
    |  4 | stu4  |   71 | M      | NULL  |
    |  5 | stu5  |   70 | M      | NULL  |
    |  6 | stu6  |   77 | F      | NULL  |
    |  7 | stu7  |   38 | F      | NULL  |
    |  8 | stu8  |   82 | F      | NULL  |
    |  9 | stu9  |   83 | M      | NULL  |
    | 10 | stu10 |   31 | F      | NULL  |
     ---- ------- ------ -------- ------- 
    在a上删除一行
    MariaDB [mydb]> delete from students where id=9;
    在b上发现也删除了
    MariaDB [mydb]> select * from students;
     ---- ------- ------ -------- ------- 
    | id | name  | age  | gender | major |
     ---- ------- ------ -------- ------- 
    |  1 | stu1  |   76 | F      | NULL  |
    |  2 | stu2  |   28 | M      | NULL  |
    |  3 | stu3  |   42 | F      | NULL  |
    |  4 | stu4  |   71 | M      | NULL  |
    |  5 | stu5  |   70 | M      | NULL  |
    |  6 | stu6  |   77 | F      | NULL  |
    |  7 | stu7  |   38 | F      | NULL  |
    |  8 | stu8  |   82 | F      | NULL  |
    | 10 | stu10 |   31 | F      | NULL  |
     ---- ------- ------ -------- ------- 
    

    复制时应当小心的标题:
    1、从劳动设定为“只读”:在从服务器运行read_only,但仅对非SUPE兰德本田UR-V权限的用户有效;
    要想阻止全数用户能够申请三个大局读锁:mysql> FLUSH TABLES WITH READ LOCK;
    2、尽量确定保障复制时的作业安全
    在master节点启用参数:sync_binlog = ON,表示一旦当前节点有东西提交时就应声从内部存款和储蓄器缓冲区保存到二进制日志中,幸免从服务器复制时二进制日志中并未有那个提交操作主服务器就坏了,那样从服务器就不知晓那么些东西该不应当提交了
    假诺用到的是InnoDB存款和储蓄引擎:
    innodb_flush_logs_at_trx_commit=ON ---每当事物提交时就伙同到东西日志中
    innodb_support_xa=ON 让innodb扶助遍布式事物
    3、从服务器意外中止时尽量防止自动运行复制线程 ,尽管从服务器在复制叁个平地风波的时候复制到50%的时候从服务器意外终止了,倘若再度开动,复制作而成效实是会活动开启的,因为在/var/lib/mysql/master.info文件中记录了连年到主服务器的新闻,所以运维mariadb服务时会自动运转复制线程,那样就能够导致难点,因为终止前的事物复制到八分之四,不亮堂该不应当提交,为了幸免这种工作发生,我们要把网断掉,查看一下是或不是有复制到二分一的东西,若是有手动删除,然后手动加change master to 指向意外终止时主服务器二进制日志的地方,恐怕再一次备份苏醒后运营复制功效
    4、从节点:设置参数
    sync_master_info=ON
    sync_relay_log_info=ON

    系统介绍:CentOS6.4_X64
    数据库版本:mysql-5.5.33

    备份类型:

    • 一同备份,部分备份;
    • 完全备份,增量备份,差别备份;
    • 热备份,温备份,冷备份;
      • MyISAM: 温备,不能热备;
      • InnoDB: 热备;
    • 大意备份(文件),逻辑备份(sql导出导入,会放弃精度);

    准备

    1、准备两台主机,我用.17充当mysql主服务器,.57来还原用。

    2、17主mysql数据库有以下多少个表

    新葡亰496net 1

    3、目录

    /data/mysq/:下寄存数据库数据

    /app/logs/:下寄放二进制日志

    。。。

    4、主从复制centos6.9的布局及注意事项

    vim /etc/my.cnf 
    
    [root@centos6 mysql]#vim /etc/my.cnf 
    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    user=mysql
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    [mysqld_safe]
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    skip_name_resolve = on
    innodb_file_per_table = on
    max_connections = 20000  ---以上三行不能写到server里,mysql服务启动不了
    [server]    ---注意在这里要加上server这一项不然不会生效
    server_id = 1
    log_bin = bin-log
    relay_log = relay-log
    auto_increment_offset = 1   
    auto_increment_increment = 2
    启动slave时要用mysql> start slave io_thread,sql_thread;
    不能简写成mysql> start slave,不然开启不了复制操作
    

    二:基于Mysqldump命令完毕备份苏醒

    备份须要思虑的因素:

    • 持锁多久
    • 备份进度的时间长度
    • 备份负载
    • 过来进度的时间长度

    实战

    5、完成基于ssl的主从复制

    1、查看所安装的数据库软件是否支持ssl,默认yum安装都是不支持的,需要编译安装的时候加上ssl功能
    MariaDB [(none)]> show global variables like '%ssl%';  
     --------------- ---------- 
    | Variable_name | Value    |
     --------------- ---------- 
    | have_openssl  | DISABLED |
    | have_ssl      | DISABLED |
    | ssl_ca        |          |
    | ssl_capath    |          |
    | ssl_cert      |          |
    | ssl_cipher    |          |
    | ssl_key       |          |
     --------------- ---------- 
    7 rows in set (0.00 sec)
    2、在主服务器上创建一个用于复制的账号,要求从服务器使用这个账号连接到主服务器时必须使用ssl连接
    grant replication client,replication slave on *.* to hello@'172.18.%.%' identified by 'centos' require ssl;
    3、在从服务器上创建证书和私钥文件
    从服务器上使用change master to命令指明自己的ssl相关选项
    help change master to查看使用的选项
    比如:change master to master_host='172.18.21.106',master_user='hello',master_password='centos',master_log_file='bin-log.000005',master_log_pos=106,MASTER_SSL_CERT='/etc/pki/tls/certs/mysql.crt',MASTER_SSL_KEY='/etc/pki/tls/certs/mysql.key';   
    这里的,MASTER_SSL_CERT='/etc/pki/tls/certs/mysql.crt',MASTER_SSL_KEY='/etc/pki/tls/certs/mysql.key';  是从服务器上的证书和私钥文件路径
    4、如果从服务器也需要主服务器提供ssl验证,就需要在主服务器上也创建证书和私钥文件
    将证书和私钥文件在主服务器的配置文件中指定
    一般情况下主服务器端不需要配置证书和私钥,因为是从服务器去连接主服务器进行复制,所以要求从服务器提供证书和私钥文件进行认证。
    

    2.1、思路概念

    备份什么?

    • 数据
    • 二进制日志,InnoDB的作业日志
    • 代码(存款和储蓄进度,存款和储蓄函数,触发器,事件调解器)
    • 服务器的布置文件

    备份阶段

    Mysqldump是二个逻辑备份命令;意思正是将数据库中的数据备份成三个文书文件;也足以说是将表的组织和数据存款和储蓄在文书文件中。

    规划备份方案:

    • 完全 增量;
    • 备份手腕: 物理,逻辑;

    1、完全备份

    mysqldump -pcentos -A -F --master-data=2 --single-transaction |gzip > /data/all-`date  %F`.sql.gz
    

    备注:

    -A:备份全体数据库

    -F:切换二进制日志

    --master-data=2:记录了依附二进制那多少个地点备份的,这些点之后是新数据,备份截至点,主从改为1

    --single-transaction:保障数据的一致性

    Mysqldump命令的办事原理很简短,它先摸清必要备份的表的构造,再在文书文件中生成一个CREATE语句。然后,将表中的具有记录调换为一条INSTERT语句。这一个CREATE语句和INSTERT语句都是过来时行使的。还原数据时就能够使用个中的CREATE语句来创立表。使用在那之中的INSERT语句来还原数据。它能够达成成套服务器备份,也足以兑现单个或一些数据库、单个或部分表、表中的少数行、存款和储蓄进程、存款和储蓄函数、触发器的备份;并且能自动记录备份时刻的二进制日志文件及相应的岗位。对于InnoDB存款和储蓄引擎来说资助基于单事务方式落成热备,对于MyISAM则最多帮忙温备。

    备份工具:

    • mysqldump: 逻辑备份工具,适用于具有存款和储蓄引擎,温备:完全备份,部分备份;对InnoDB存款和储蓄引擎援助热备份;
    • cp,tar等复制归档工具: 物理备份工具,适用于具备存款和储蓄引擎:冷备;完全备份,部分备份;
    • mysqlhotcopy: 大概冷备; 仅适用于MyISAM存款和储蓄引擎;

    2、解压并查阅

    gzip -d all-2018-08-03.sql.gz
    less all-2018-08-03.sql
    

    新葡亰496net 2

    备注:记住这几个文件以及数字,一会重操旧业的时候要用

    2.2、备份攻略

    备份工具的挑选:

    • mysqldump 复制binlog:
      • mysqldump: 完全备份;
      • 复制binlog中钦点事件范围event:增量备份;
    • lvm2快照 复制binlog:
      • lvm2快速照相: 使用cp或tar等做物理备份: 完全备份;
      • 复制binlog中钦命期间限定的event: 增量备份;
    • xtrabackup:
      • 由percona提供的支撑对InnoDB做热备(物理备份)的工具;
      • 一起备份,增量备份;

    3、修改students表(新数据和日志)

    1)没修改前

    新葡亰496net 3

    2)加记录

    insert students (name,age)values('gaoda1hao',20);
    

    新葡亰496net 4

    3)查看现在的二进制变化

    新葡亰496net 5

    4)假若以后那台mysql服务器宕机崩溃了,下边初叶重操旧业

    。。。

    Mysqldump全备 二进制日志增备

    mysqldump命令行工具使用

    客户端命令,通过mysql协议持续击打至mysqld服务器:

    mysqldump [option] [db_name [tbl_name ...]]
    
    shell> mysqldump [option] db_name [tbl_name ...] # 这种方式不会导出创建数据库语句,导入须手动创建数据库
    shell> mysqldump [option] --database db_name ...
    shell> mysqldump [option] --all-databases
    

    MyISAM: 帮助温备;锁定备份库,而后运转备份操作;

    锁定方法:

    --lock-all-tables: 锁定所有库的所有表;
    --lock-tables: 对于每个单独的数据库, 在启动备份之前锁定其所有表;
    

    InnoDB: 匡助热备;

    --single_transaction
    

    别的选取:

    -E, --events: 备份指定数据库相关的所有event scheduler;
    -R, --routines: 备份指定数据库相关的所有存储过程和存储函数;
    --triggers: 备份表相关的触发器;
    
    --master-data[=#]
        1: 记录为CHANG MASTER TO语句, 此语句不被注释;
        2: 记录为注释的CHANGE MASTER TO语句;
    
    --flush-logs:锁定表完成后,执行flush logs命令;
    

    稳重: 二进制文件不应该与数据文件放在同等磁盘

    练习: 有一100MB级其他数据库

    1. 备份脚本;
    2. 制作备份战术;

    光复星等

    地方规划的是用57那台主机来回复,首先这台主机必须是干净的mysql数据库

    2.3、进度达成

    基于LVM2备份

    1. 恳请锁定全部表;
    2. 笔录二进制文件爱及事件地点;
    3. 创建快速照相;
    4. 释放锁;
    5. 挂载快速照相卷,试行数据备份;
    6. 备份完毕后,删除快速照相卷;
    7. 制定好政策,通过原卷备份二进制日志;
    systemctl stop mariadb.service
    mkdir -pv /data/mysql
    chown -R mysql.mysql /data/mysql
    
    # fdisk 创建一个新分区
    partx -a /dev/sda
    pvcreate /dev/sda7
    vgcreate myvg /dev/sda7
    lvcreate -L  5G -n mydata myvg
    lvs
    mkfs.xfs /dev/myvg/mydata
    mount /dev/myvg/mydata /data/mysql
    
    # my.cnf 修改datadir
    systemctl start mariadb.service
    
    
    mysql> show master status;
    mysql> FLUSH TABLES WTIH READ LOCK;
    mysql> FLUSH LOGS;
    mysql> show master status;
    # shell> mysql -e 'show master status' > /path/to/smmefile
    
    lvcreate -L 500M -s -n mydata-snap -p -r /dev/myvg/mydata
    
    mysql> unlock tables;
    
    mount -r /dev/myvg/mydata-snap /mnt
    cp -a /mnt/* /data/mysql/
    

    1、scp传送

    1)传送完全备份文件到对象主机

    scp all-2018-08-03.sql 192.168.43.57:
    

    2)传送上边图中00005文件以及随后的二进制文件到对象主机

    scp mysql-bin.000005 192.168.43.57:
    

    (1)Mysqldump全备
    鉴于Mysql数据库私下认可的为MyISAM存款和储蓄引擎所以独有选拔温备(备份同一时候仅援救读央浼)进行,所以大家要为所有数据库加多读锁

    xtrabackup

    percona, www.percona.com

    percona-server

    2、57主机来平复

    在意:还原的时候要禁止除了您之外的兼具用户的寻访。

    停下mysql服务,在my.cnf配置文件中得以拉长地方提及一项

    1)开启服务前提下并完全备份数据包

    mysql < all-2018-08-03.sql
    

    备注:未来只还原到了,备份时的境况,下边再度苏醒备份后到宕机这段时候发出的操作

    2)导入二进制日志

    mysqlbinlog  --start-position=385 /root/mysql-bin.000005 > /app/binlog.sql
    

    备注:把00005中从385发端的命令语句导入到三个文书中

    mysql < /app/binlog.sql
    

    备考:导入二进制记录的授命

    。。。

    [root@stu18 ~]
    #mysqldump -uroot -pmypass --lock-all-tables --master-data=2 --events --routines--all-databases > /zhao/database_`date  %F`.sql
    

    验证

    1、看表存在不

    新葡亰496net 6

    2、看表数据正不科学

    新葡亰496net 7

    OK 还原成功

     

    解析:–lock-all-tables表示为保有表施加读锁;–master-data=2表示在备份文件中著录当前二进制日志的岗位;–events表示备份数据的还要备份时间调节器代码;–routines表示备份数据的同期备份存款和储蓄进度和存款和储蓄函数;–all-databases表示备份全体库。

    上面再来演示叁个案例-误删除表的恢复生机

    诸如大家在某天的12点中做了截然备份,在下贰回做完全备份中间有一天奉行了删除某张表,删除后等了多少个小时才意识表删除了,

    在这种处境下,来过来数据,上边来模拟下。

    仿照顺序:完全备份--用户对表的数量修改--删除某张表--未发掘用户继续对任何表操作--当访谈被删除的表时开采--

    预备干活和下边同样,上面踏入正题

    前几步和前面同样

    [root@stu18 zhao]
    # less database_2013-08-13.sql
    --   
    #表示注释项
    -- Position to start replication or point-in-time recovery from
    --
    -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=14203; 
    #这里表示当前处于mysql-bin.000001这个二进制日志中,事件为14203这是通过--master-data=2产生的
    --
    -- Current Database: `hellodb`
    --
    CREATE DATABASE /*!32312 IF NOT EXISTS*/ `hellodb` /*!40100 DEFAULT CHARACTER SET utf8 */;
    

    1、完全备份

    mysqldump -pcentos -A -F --master-data=2 --single-transaction |gzip > /data/all-`date  %F`.sql.gz
    

    (2)二进制全备

    2、模拟误删除表前的改变

    insert students (name,age)values('gaoda1hao',20);
    

    。。。

    备注:那之间加了许大多量,恐怕二进制文件已经满了,实行了切换

    措施一: 导出二进制日志文件内容

    3、模拟二进制文件的切换

    flush logs;
    #
    

    接着扩充几条记下

    insert students (name,age)values('gaoda2hao',22);
    
    [root@stu18 data]
    # mysqlbinlog mysql-bin.000001 >/zhao/binlog_`date  %F`.sql
    

    4、模拟误删除数据表

    drop table students;
    

    备考:删除后还么有觉察,接着扩展其余表的数目

    insert teachers (name,age)values('gaoda3',30);
    

    措施二:滚动日志复制文件

    5、发掘标题并及时禁止用户写权限(只好读)

    flush tables with read lock;
    

    备注:今后不得不root用户能够读写别的用户是不可能修改数据的

    新葡亰496net 8

    。。。

    mysql> flush logs; 
    #滚动日志
    [root@stu18 data]
    # cp mysql-bin.000001 /zhao/mysql-bin.000001 #复制导出二进制文件
    

    6、干净系统还原

    1)截至服务

    systemctl stop mairadb
    

    2)删除全数mysql数据库数据

    rm -rf /var/lib/mysql/
    

    3)确认保障用户不能够访谈服务器 配置文件加上

    skip-networking
    

    4)运维服务

     

    (3)二进制增备
    第一添扩展少消息

    7、还原完全备份

    1)解压完全备份包

    gzip -d all-2018-08-03.sql.gz
    

    2)查看解压的文件规定地方

    less all-2018-08-03.sql
    

    新葡亰496net 9

    3)把全体备份传送到57目的主机还原

    mysql <all-2018-08-03.sql
    
    mysql> use hellodb;
    mysql> INSERT INTO students(Name,Age,Gender,ClassID,TeacherID) values ('Yang kang',22,'M',3,3);
    

    8、还原增量备份

    1)合并00004以及随后的二进制日志文件

    mysqlbinlog  --start-position=385 mysql-bin.000004 > /data/binlogs.sql
    mysqlbinlog   mysql-bin.000005 >> /data/binlogs.sql
    mysqlbinlog   mysql-bin.000006 >> /data/binlogs.sql
    

    2)从统一的二进制日志文件中找到误操作的一声令下删除或注释

    新葡亰496net 10

    3)scp传送到57对象主机还原

    mysql <binlogs.sql
    

    。。。

    下一场二进制增备

    验证

    1、删除的表看看有了没

    新葡亰496net 11

    2、在表删除后其它的表改的笔录还在不

    新葡亰496net 12

    OK

    过来成功

    应接补充--

    [root@stu18 data]
    # mysqlbinlog --start-position=14203 --stop-position=14527 mysql-bin.000001 > /zhao/binlog_`date  %F_%H`.sql
    

    深入分析:–start-position=14203是上次全备之后的二进制事件地方;–stop-position=14527近期一天的二进制事件地点。

    2.4、模拟数据库损坏,达成苏醒专业

    mysql> DROP DATABASE hellodb;    
    #删除数据库
    ############下面这些过程要在离线状态下执行############
    mysql> SET sql_log_bin=0;     
    #先关闭二进制日志
    mysql> flush logs;      
    #滚动日志
    [root@stu18 ~]
    # mysql -uroot -pmypass < /zhao/database_2013-08-13.sql #导入数据库备份文件
    [root@stu18 ~]
    # mysql -uroot -pmypass < /zhao/binlog_2013-08-13_19.sql #导入增量备份文件
    [root@stu18 ~]
    # mysql -uroot –pmypass #登录查看,恢复完成
    mysql> SET sql_log_bin=1;
    

    这种备份形式苏醒轻巧,然则还原过来之后索引会出现错误需求重新建立,何况备份结果会攻下十分的大的长空,请酌定选用。

    PS:mysqldump常用命令小结 备份MySQL数据库的通令

    mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql
    

    备份MySQL数据库为带删除表的格式

    备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而没有须求手动删除原有数据库。

    mysqldump -–add-drop-table -uusername -ppassword databasename > backupfile.sql
    

    向来将MySQL数据库压缩备份

    mysqldump -hhostname -uusername -ppassword databasename | gzip > backupfile.sql.gz
    

    备份MySQL数据库某些(些)表

    mysqldump -hhostname -uusername -ppassword databasename specific_table1 specific_table2 > backupfile.sql
    

    並且备份三个MySQL数据库

    mysqldump -hhostname -uusername -ppassword –databases databasename1 databasename2 databasename3 > multibackupfile.sql
    

    无非备份数据库结构

    mysqldump –no-data –databases databasename1 databasename2 databasename3 > structurebackupfile.sql
    

    备份服务器上具有数据库

    mysqldump –all-databases > allbackupfile.sql
    

    过来MySQL数据库的命令

    mysql -hhostname -uusername -ppassword databasename < backupfile.sql
    

    复苏压缩的MySQL数据库

    gunzip < backupfile.sql.gz | mysql -uusername -ppassword databasename
    

    将数据库转移到新服务器

    mysqldump -uusername -ppassword databasename | mysql –host=*.*.*.* -C databasename
    

    三、基于LVM快速照相达成备份復苏

    3.1、思路明细

    (1)LVM这种备份格局须要Mysql的多寡保存在逻辑卷上
    (2)需求给Mysql服务器施加读锁(mysql>FLUSH TABLES WITH READLOCK;),这里不足直接退出服务器
    (3)另起终点为多少所在的卷创建快速照相(lvcreate),保险职业日志和数据文件必须在长期以来卷上(分别成立或然会导致数据文件和职业日志不一致等,进而可能引致敬敏不谢平常复苏)

    3.2、备份战术

    LVM快速照相全备 二进制日志增备(对于即时点苏醒还要苏醒至一而再的二进制地方)

    3.3、前提条件

    (1)创制逻辑卷及挂载逻辑卷,此进度在此就不做示范了

    (2)开首化mysql将其数额目录指向/mydata/data

    [root@stu18 ~]
    # cd /usr/local/mysql/
    [root@stu18 mysql]
    # scripts/mysql_install_db --user=mysql --datadir=/mydata/data
    

    (3)编辑查看配置文件,重启服务

    [root@stu18 mysql]
    # vim /etc/my.cnf
    datadir = /mydata/data 
    #查看此项是否定义数据目录位置
    sync_binlog=1 
    #添加此项,每个事务提交时候,把事务日志从缓存区写到日志文件中,并且刷新日志文件的数据到磁盘上;
    [root@stu18 mysql]
    # service mysqld start
    

    3.4、进程展现

    (1)确认保证业务日志和数据文件必须在同样卷上

    [root@stu18 ~]
    # ls /mydata/data/
    hellodb  myclass   mysql-bin.000003 stu18.magedu.com.err
    ibdata1  mysql    mysql-bin.000004 stu18.magedu.com.pid
    ib_logfile0 mysql-bin.000001 mysql-bin.index  student
    ib_logfile1 mysql-bin.000002 performance_schema test
    

    解析:其中ib_logfile0与ib_logfile1是日记文件
    (2)施加全局锁并滚动日志

    mysql> FLUSH TABLES WITH READ LOCK;
    mysql> FLUSH LOGS;
    

    (3)查看并保留当前正值利用的二进制日志及当前推行二进制日志地点(特别主要)

    mysql> SHOW MASTER STATUS;
     ------------------ ---------- -------------- ------------------ 
    | File    | Position | Binlog_Do_DB | Binlog_Ignore_DB |
     ------------------ ---------- -------------- ------------------ 
    | mysql-bin.000004 |  187 |    |     |
     ------------------ ---------- -------------- ------------------ 
    [root@stu18 zhao]
    # mysql -uroot -pmypass -e 'SHOW MASTER STATUS;' >/zhao/lvmback-2013-08-14/binlog.txt
    

    (4)创制快速照相卷

    [root@stu18 zhao]
    # lvcreate -L 100M -s -p r -n mydata-lvm /dev/vg1/mydata
    

    (5)立刻切换终端释放锁

    mysql> UNLOCK TABLES;
    

    (6)备份数据

    [root@stu18 data]
    # cp -a * /zhao/lvmback-2013-08-14/
    

    (7)二进制落成增量备份

    mysql> use hellodb;   
    #指定默认数据库
    Database changed
    mysql> CREATE TABLE testtb (id int,name CHAR(10));  
    #创建表
    Query OK, 0 rows affected (0.35 sec)
    mysql> INSERT INTO testtb VALUES (1,'tom');   
    #添加数据
    Query OK, 1 row affected (0.09 sec)
    [root@stu18 data]
    # mysqlbinlog --start-position=187 mysql-bin.000004 > /zhao/lvmlogbin_2013-08-14/binlog.sql   #日志实现增量备份
    

    (8)模拟数据库崩溃

    [root@stu18 ~]
    # service mysqld stop
    [root@stu18 ~]
    # cd /mydata/data/
    [root@stu18 data]
    # rm -rf *
    

    (9)恢复生机数据

    [root@stu18 ~]
    # cp /zhao/lvmback-2013-08-14/* /mydata/data/ -a   #完全备份恢复
    [root@stu18 ~]
    # cd /mydata/data/    #查看恢复数据内容
    [root@stu18 data]
    # chown -R mysql.mysql * #更改属主属组
    [root@stu18 data]
    # service mysqld start  #启动服务
    [root@stu18 data]
    # mysql -uroot –pmypass #登录测试
    
    
    mysql> SHOW DATABASES;  
    #查看数据完整性,无测试表testtd使用二进制恢复
    mysql> SET sql_log_bin=0 
    #关闭二进制日志
    mysql> source /zhao/lvmlogbin_2013-08-14/binlog.sql; 
    #二进制恢复
    mysql> SHOW TABLES;   
    #查看恢复结果
     ------------------- 
    | Tables_in_hellodb |
     ------------------- 
    | classes   |
    | coc    |
    | courses   |
    | scores   |
    | students   |
    | teachers   |
    | testtb   |
    | toc    |
     ------------------- 
    mysql> SET sql_log_bin=1; 
    #开启二进制日志
    

    此工具是近似于热备的章程达成的,并且用此方法来备份苏醒数据速度是可怜快的。

    四:基于xtrabackup来完成备份复苏

    4.1、优势特色

    一起以热备的款式开始展览,能够落到实处飞快可相信地全盘备份和一些备份,协助增量备份,协助时间点恢复生机,备份进度中不会扰乱到事务操作,能够落到实处互连网传输和削减成效由此使得的节约磁盘空间,备份完毕后可自行验证数据是或不是可用,恢复速度极快等等。越多优势特点请参谋

    留意:以上那些优势特点只可以在InnoDB引擎上巨细无遗兑现,而在MyISAM存款和储蓄引擎上依然最七只好选拔温备的花样进行同期还不协助增量备份。
    除此以外Xtrabackup越来越多的高级功用还借助于Mysql数据库对于InnoDB达成了独立的表空间,不然也就不曾艺术落实单表导入导出查看格局如下:

    mysql> SHOW GLOBAL VARIABLES LIKE 'innodb_file%';
     -------------------------- ---------- 
    | Variable_name   | Value |
     -------------------------- ---------- 
    | innodb_file_format  | Antelope |
    | innodb_file_format_check | ON  |
    | innodb_file_format_max | Antelope |
    | innodb_file_per_table | ON  |
     -------------------------- ---------- 
    

    其中的innodb_file_per_table为ON则意味着实现了单表单空间。若为OFF则须求利用mysqldump全备然后改换配置文件删除原本的数据文件同等对待新开首化服务器最终将数据再次导入。所以建议之后在装置Mysql服务器时将其选用暗许设置成1就能够(innodb_file_per_table = 1)。单表单空间的数额突显格局为:

    [root@stu18 hellodb]
    # ls
    classes.frm coc.MYD  courses.MYI scores.MYI teachers.frm testtb.ibd
    classes.MYD coc.MYI  db.opt  students.frm teachers.MYD toc.frm
    classes.MYI courses.frm scores.frm students.MYD teachers.MYI toc.MYD
    coc.frm  courses.MYD scores.MYD students.MYI testtb.frm toc.MYI
    

    4.2、安装Xtrabackup

    下载percona-xtrabackup最新的本子为2.1.4(percona-xtrabackup-2.1.4-656.rhel6.x86_64.rpm)
    安装:

    [root@stu18 ~]
    # rpm -ivh percona-xtrabackup-2.1.4-656.rhel6.x86_64.rpm
    

    若有荒唐不能安装请安装perl-DBD-mysql正视包

    [root@stu18 ~]
    # yum -y install perl-DBD-mysql
    

    留意:不一致的条件信赖的关系包只怕有三个,请依据提醒举行布局

    4.3、完全备份

    应用innobakupex备份时,其会调用xtrabackup备份全数的InnoDB表,复制全体关于表结构定义的相干文书(.frm)、以及MyISAM、ME科雷傲GE、CSV和ARC麻疹E表的有关文件,相同的时间还有大概会备份触发器和数据库配置新闻有关的文书。那个文件会被保存至三个以时间命令的目录中。完全备份命令如下:

    # innobackupex --user=DBUSER--password=DBUSERPASS /path/to/BACKUP-DIR/
    

    落到实处进度及表达:

    [root@stu18 ~]
    # mkdir /innobackup    #创建备份文件目录
    [root@stu18 ~]
    # innobackupex --user=root --password=mypass /innobackup/ #完全备份
    ################如果执行正确其后输出的几行信息通常如下###############
    xtrabackup: Transaction log of lsn (1604655) to (1604655) was copied. 
    #二进制日志的位置(lsn)
    130814 07:04:55 innobackupex: All tables unlocked
    innobackupex: Backup created in directory '/innobackup/2013-08-14_07-04-49'
    #备份文件保存的位置
    innobackupex: MySQL binlog position: filename 'mysql-bin.000003', position 538898
    130814 07:04:55 innobackupex: Connection to database server closed
    130814 07:04:55 innobackupex: completed
    

    OK!       备份完毕
    切换至备份文件目录查看备份的数量音讯及创设生成的文件:

     [root@stu18 ~]
    # cd /innobackup/2013-08-14_07-04-49/
    [root@stu18 2013-08-14_07-04-49]
    # ls
    backup-my.cnf myclass    student   xtrabackup_binlog_info
    hellodb  mysql    test    xtrabackup_checkpoints
    ibdata1  performance_schema xtrabackup_binary xtrabackup_logfile
    

    针对文件分析:

    (1)xtrabackup_checkpoints —— 备份类型(如完全或增量)、备份状态(如是还是不是早就为prepared状态)和LSN(日志体系号)范围消息;
    各类InnoDB页(日常为16k轻重缓急)都会含有三个日志类别号,即LSN。LSN是全方位数据库系统的种类版本号,每一个页面相关的LSN能够证明此页面近些日子是哪些发生转移的。
    (2)xtrabackup_binlog_info —— mysql服务器当前正值接纳的二进制日志文件及至备份这一阵子了却二进制日志事件的地点。
    (3)xtrabackup_binary —— 备份中用到的xtrabackup的可推行文件;
    (4)backup-my.cnf —— 备份时用到的布局选项音信,也正是安排文件中关于mysqld的有关文书配置;
    (5) xtrabackup_logfile —— 非文书文件是xtrabackup本人的日志文件;

    4.4、计划一个通通备份

    诚如情况下,在备份完结后,数据尚且不可能用于复苏操作,因为备份的数据中可能会包罗尚未提交的职业或曾经付出但从分化步至数据文件中的事务。因而,此时数据文件仍处在不等同状态。“筹划”的首要成效正是经过回滚未提交的事务及联合已经交给的事情至数据文件进而使得数据文件处于一致性状态。

    innobakupex命令的–apply-log选项可用于贯彻上述意义。如上边包车型大巴通令:

    [root@stu18 ~]
    # innobackupex -apply-log /innobackup/2013-08-14_07-04-49/
    #############如果执行正确,其最后输出的几行信息通常如下################
    xtrabackup: starting shutdown with innodb_fast_shutdown = 1
    130814 7:39:33 InnoDB: Starting shutdown...
    130814 7:39:37 InnoDB: Shutdown completed; log sequence number 1606156
    130814 07:39:37 innobackupex: completed OK!
    

    4.5、模拟数据库崩溃完毕完全苏醒

    (1)模拟崩溃

    [root@stu18 ~]
    # service mysqld stop
    [root@stu18 ~]
    # cd /mydata/data/
    [root@stu18 data]
    # rm -rf *
    

    (2)从一丝一毫备份中平复数据(谨记:在恢复生机数据从前千万不可早先化数据库和运行服务)
    innobackupex命令的–copy-back选项用于实行恢复生机操作,其通过复制全数数据相关的文本至mysql服务器DATADIEnclave目录中来实践苏醒进程。innobackupex通过backup-my.cnf来博取DATADIEnclave目录的有关消息。

    [root@stu18 ~]
    # innobackupex --copy-back /innobackup/2013-08-14_07-04-49/
    #############如果执行正确,其最后输出的几行信息通常如下################
    innobackupex: Starting to copy InnoDB log files
    innobackupex: in '/innobackup/2013-08-14_07-04-49'
    innobackupex: back to original InnoDB log directory '/mydata/data'
    innobackupex: Copying '/innobackup/2013-08-14_07-04-49/ib_logfile0' to '/mydata/data'
    innobackupex: Copying '/innobackup/2013-08-14_07-04-49/ib_logfile1' to '/mydata/data'
    innobackupex: Finished copying back files.
    130814 07:58:22 innobackupex: completed OK!
    

    (3)当数据复苏至数据目录之后,还亟需保险全数数据文件的属主和属组均为正确的用户,如mysql,否则,在起步mysqld在此之前还亟需事先修改数据文件的属主和属组。

    # chown -R mysql:mysql /mydata/data/
    

    (4)运营服务器登录查看恢复实现。

    [root@stu18 data]
    # service mysqld start
    

    在意:每便复苏达成之后自然要双重做贰回完全备份专门的学业!!

    4.6、使用innobackupex进行增量备份

    证实:每一个InnoDB的页面都会蕴藏二个LSN新闻,每当相关的数目产生改变,相关的页面包车型地铁LSN就能够活动增加。这正是InnoDB表能够张开增量备份的功底,即innobackupex通过备份上次完全备份之后产生转移的页面来达成。
    先是次变动数据实现增量备份
    完成增量备份能够动用下边包车型大巴授命举办:

    [root@stu18 data]
    # innobackupex --user=root --password=mypass --incremental /innobackup --incremental-basedir=/innobackup/2013-08-14_08-14-12/
    

    中间,/innobackup指的是全然备份所在的目录,此命令施行实现后,innobackupex命令会在/backup目录中开创四个新的以时日命名的目录以存放全部的增量备份数据。–incremental-basedir是指向上二次完全备份所在的目录。

    第贰回变动数据开始展览增量备份:

    [root@stu18 ~]
    # innobackupex --user=root --password=mypass --incremental /innobackup --incremental-basedir=/innobackup/2013-08-14_08-29-05/
    

    第二回增量备份的实施命令和率先次大概同样,只有其–incremental-basedir应该本着上一遍的增量备份所在的目录。

    其叁遍变动数据还未开始展览增量备份

    mysql> delete from coc where id=14;
    

    4.7、使用innobackupex基于完全 增量 二进制日志苏醒数据

    (1)由于小编这里将二进制日志和数据文件写在了同三个文件目录下所以在模仿数据库崩溃前必须先复制出二进制日志文件,所以建议看客们将数据目录和二进制目录分开贮存,不要和小编同样犯如此二的不当。方法如下:
    前提是在刚刚确立服务器并未有运转服务器此前做如下操作;

    mkdir /mybinlog 
    #建立一目录用于存放二进制日志
    chown mysql:mysql /mybinlog 
    #更改权限
    vim /etc/my.cnf 
    #修改配置文件
    log-bin=/mybinlog/mysql-bin 
    #二进制日志目录及文件名前缀,添加之
    

    好了言归正传复制二进制日志文件:

    [root@stu18 data]
    # cp mysql-bin.000001/innobackup/
    

    (2)模拟服务器崩溃

    [root@stu18 ~]
    # service mysqld stop
    [root@stu18 ~]
    # cd /mydata/data/
    [root@stu18 data]
    # rm -rf *
    

    (3)希图备份

    率先注意“筹划”增量备份与整治完全备份有着一些不等,特别要注意的是:
    1)要求在每种备份(包蕴完全和一一增量备份)上,将曾经交由的事务进行“重放”。“重放”之后,全数的备份数据将合併到完全备份上。
    2)基于全数的备份将未提交的作业进行“回滚”。

    全然备份“打算”

    [root@stu18 ~]
    # innobackupex --apply-log --redo-only/innobackup/2013-08-14_08-14-12/
    

    先是次增量备份“策画”也正是说将率先次增量备份合併到了截然备份中

    [root@stu18 ~]
    # innobackupex --apply-log--redo-only /innobackup/2013-08-14_08-14-12/--incremental-dir=/innobackup/2013-08-14_08-29-05/
    

    其次次增量备份“策动”也便是说将第一遍增量备份也联合到了完全备份中

    [root@stu18 ~]
    # innobackupex --apply-log--redo-only /innobackup/2013-08-14_08-14-12/ --incremental-dir=/innobackup/2013-08-14_09-08-39/
    

    中间 –redo-only是只将已提交的作业同步到数据文件中,未提交的业务日志不在举办回滚了。

    (4)苏醒数据(基于innobackupex基于完全 增量)

    [root@stu18 ~]
    # innobackupex --copy-back/innobackup/2013-08-14_08-14-12/
    

    (5)改造属组属主

    [root@stu18 ~]
    # cd /mydata/data/
    [root@stu18 data]
    # chown -R mysql:mysql *
    

    (6)运转查看

    [root@stu18 ~]
    # mysql -uroot -pmypas
    mysql> select * from coc;
     ---- --------- ---------- 
    | ID | ClassID | CourseID |
     ---- --------- ---------- 
    | 1|  1 |  2 |
    | 2|  1 |  5 |
    | 3|  2 |  2 |
    | 4|  2 |  6 |
    | 5|  3 |  1 |
    | 6|  3 |  7 |
    | 7|  4 |  5 |
    | 8|  4 |  2 |
    | 9|  5 |  1 |
    | 10 |  5 |  9 |
    | 11 |  6 |  3 |
    | 12 |  6 |  4 |
    | 13 |  7 |  4 |
    | 14 |  7 |  3 |
     ---- --------- ---------- 
    14 rows in set (0.00 sec)
    

    结果展现数据科学完好,可是首次的变动音讯未见效。

    (7)基于二进制日志完成数据复苏
    查阅最终三遍增量备份二进制日志所在的岗位:

    [root@stu18 data]
    # cd /innobackup/2013-08-14_09-08-39/
    [root@stu18 2013-08-14_09-08-39]
    # cat xtrabackup_binlog_info
    mysql-bin.000001 780
    

    查阅二进制日志文件将未备份数据的二进制日志导出

    [root@stu18 innobackup]
    # mysqlbinlog mysql-bin.000001
    # at 780
    #130814 9:20:19 server id 1 end_log_pos 851 Query thread_id=7 exec_time=0 error_code=0
    SET TIMESTAMP=1376443219/*!*/;
    BEGIN
    /*!*/;
    # at 851
    #130814 9:20:19 server id 1 end_log_pos 944 Query thread_id=7 exec_time=0 error_code=0
    SET TIMESTAMP=1376443219/*!*/;
    delete from coc where id=14
    /*!*/;
    # at 944
    #130814 9:20:19 server id 1 end_log_pos 1016 Query thread_id=7 exec_time=0 error_code=0
    SET TIMESTAMP=1376443219/*!*/;
    COMMIT
    /*!*/;
    DELIMITER ;
    # End of log file
    ROLLBACK /* added by mysqlbinlog */;
    /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
    /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
    [root@stu18 innobackup]
    # mysqlbinlog --start-position=780 mysql-bin.000001 > ./all.sql  #导出数据
    

    重作冯妇数据

    [root@stu18 ~]
    # mysql -uroot –pmypass
    mysql> SET SQL_LOG_BIN=0;   
    #关闭二进制日志
    mysql> source /innobackup/all.sql 
    #导入数据
    mysql> SET SQL_LOG_BIN=1;   
    #开启二进制日志
    mysql> select * from coc;   
    #查看数据,恢复完成
     ---- --------- ---------- 
    | ID | ClassID | CourseID |
     ---- --------- ---------- 
    | 1 |  1 |  2 |
    | 2 |  1 |  5 |
    | 3 |  2 |  2 |
    | 4 |  2 |  6 |
    | 5 |  3 |  1 |
    | 6 |  3 |  7 |
    | 7 |  4 |  5 |
    | 8 |  4 |  2 |
    | 9 |  5 |  1 |
    | 10 |  5 |  9 |
    | 11 |  6 |  3 |
    | 12 |  6 |  4 |
    | 13 |  7 |  4 |
     ---- --------- ---------- 
    13 rows in set (0.00 sec)
    

    这种备份复苏措施完全以热备的方式达成完全备份和增量备份和二进制日志还原数据,并且苏醒速度也异常的快,是一流的备份恢复生机措施!!

    总结:以上三种备份复苏都是能够依据二进制日志文件实行的,因此显示出了二进制日志的严重性,从而映射出了日志的尤为重要;所以读书查看使用日志文件是读书Mysql的基本点!

    你也许感兴趣的稿子:

    • MySQL数据库备份与回复措施
    • MySQL忘记密码苏醒密码的兑现格局
    • 用mysqldump备份和大张旗鼓钦赐表的艺术
    • MySQL数据库恢复生机(使用mysqlbinlog命令)
    • 详解Mysql自动备份与还原的二种方法(图像和文字化教育程)
    • mysql 误删除ibdata1之后的东山复起措施
    • MYSQL使用.frm苏醒数据表结构的兑现情势
    • MySQL单表ibd文件复苏措施详解
    • Mysql达成增量复苏的法子详解

    本文由新葡亰496net发布于电脑系统,转载请注明出处:新葡亰496net:备份与还原,备份和还原

    关键词: