? |
| max_binlog_cache_size???????????? | 18446744073709547520 |
| max_binlog_size?????????????????? | 1073741824?????????? |? #二进制日志文件的单文件上限;达到这个大小了,会自动滚动 (单位字节)
| max_binlog_stmt_cache_size??????? | 18446744073709547520 |
| sync_binlog?????????????????????? | 0??????????????????? |? #设定多久将缓存中的数据同步至二进制日志文件(磁盘上);0表示不同步(有内部线程控制);任何正值都表示记录多少个语句后同步一次;
+-----------------------------------+----------------------+
?
MariaDB [(none)]> show global variables like '%log_bin%';
+---------------------------------+-------+
| Variable_name?????????????????? | Value |
+---------------------------------+-------+
| log_bin???????????????????????? | ON??? |???? #记二进制日志文件存放位置及文件名
| sql_log_bin???????????????????? | ON??? |???? #是否启用二进制日志
+---------------------------------+-------+
log_bin往往在配置文件中指定,如果指定了其他的存放目录,需要将该目录的属主和数组改成mysql,否则数据库无法启动。
在备份和恢复的过程中往往还需要查看数据库当前所记录的二进制日志文件以及当前事件所处的位置,
MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File???????????? | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |????? 791 |????????????? |????????????????? |
+------------------+----------+--------------+------------------+
如果备份文件只备份了某个事件之前的所有数据(在备份时往往会记录这个事件的位置,简单起见,也可以直接滚动日志),那么后面所做的操作都需要通过二进制日志文件来恢复。通过--start-position指定备份结束的事件位置,--stop-position指定需要恢复到哪个事件。
[root@CentOS-6 mysql_bin_log]# mysqlbinlog --start-position=num1 --stop-position=num2 mysql-bin.###### > /tmp/a.sql
[root@CentOS-6 mysql_bin_log]# mysql
当然,备份文件的事件结束位置和需要恢复至某个事件的位置之间可能隔了很多个日志文件,将它们全部导出,再导入至服务器执行一次即可。这个也可以通过--start-datetime,--stop-datetime来实现。
mysqldump备份恢复
mysqldump是一个客户端工具,通过mysql协议连接至数据库服务器,并将获取的数据结果转化为DDL,DML语句保存下来。备份的机制比较简单,但是如果数据库中的数据很多,mysqldump产生的SQL语句就会非常庞大,使得恢复的速度非常慢。mysqldump支持MyISAM表的温备,对InnoDB支持到热备。
为了操作的方便可以在家目录下的.my.cnf文件中添加[mysqldump]或[client],将数据库管理员的用户名密码写在下面即可。如下:
[client]
user = root
password = ######
host = localhost
mysqldump常用选项:
-u,-h,-p??????????????????????? #指定连接数据库的用户名密码,地址
-A, --all-databases?????? #备份所有数据库
-x, --lock-all-tables????? #锁定所有表
?-l, --lock-tables?????????? #锁定备份的表(只有备份单张表才建议使用这个选项)
-B, --databases db_name1 db_name2 ...???? #备份指定的数据库
--single-transaction???? #启动一个大的单一事务实现备份(热备,只能针对InnoDB存储引擎来实???????????????????????????????????????????? #现,如果备份的表中有MyISAM的表,则对于这些表没有任何意义)
-C, --compress???????????? #压缩传输(在服务器端会占用更过的cup时钟周期)
-E, --events????????????????? #备份指定库的事件调度器;
-R, --routines?????????????? #备份存储过程和存储函数;
--triggers????????????????????? #备份触发器
-F,--flush-logs????????????? #锁定表之后执行flush logs命令(日志滚动);
--master-data[=num]?? #在完全备份的备份文件中记录下来,在备份那一时刻(锁定所有表时),对
????????????????????????????????????? #应的二进制日志文件的文件名及其位置。num=0表示不记录,num=1,
????????????????????????????????????? #记录CHANGE MASTER TO语句(语句未被注释),num=2,记录为注
????????????????????????????????????? #释语句;
mysqldump备份过程
1、对所有表进行锁定,然后备份所有库。
[root@CentOS-6 data]# mysqldump --all-databases? --lock-all-tables --master-data=2 > /backup/`date +%F`.all.sql
2、数据库更改之后,通过二进制日志文件对其进行增量备份。增量备份前先查看完全备份文件中记录的事件位置(--master-data),然后查看当前的事件位置,备份两个事件之间的所有事件。这里没有进行日志滚动,简单起见,可以直接在执行完全备份时加上--flush-logs,自动实现日志滚动。
|