mysqldump数据库恢复

知识点;
mysqldump;
innoDB;热备 、温备
Myism; 温备

#mysql TAB键补全可以看到mysql;

Mysqldump options [db name]库  [tbl name]表 

mysqldump [OPTIONS] database [tables]
                OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
                OR     mysqldump [OPTIONS] --all-databases [OPTIONS]
三种备份方式;
1、指定库或库的表,不用选项 ,单库同时可以指定表
2、--databases 指定数据库名,指定多库
3、--all-databases 指定全部数据库,全部备份

将所有的数据文本化,如果将二进制数据文本化将丢失数据,所以不太理想;
1、mysqldump能指定数据库备份;
2、--databases 不能自己指定数据库恢复(在mysql中手动新创建数据库将备份的数据文件导入)
备份多个库;
#Mysqldump --databases mydb testdb mysql >/tmp/mydb-testdb-mysql-fullbackup-$(date +%F-%H-%M-%S)
Less /tmp/mydb-testdb-mysql ---TAB
简单mysql数据库恢复操作;
#mysqldump mydb ---备份mydb数据库
#mysqldump mydb |less---查看数据库内容

#mysqldump mydb > /tmp/mydb-fullbackup-$(date +%F-%H-%M-%S)


#ls  tmp

#mysql
create DATABASE TESTDB;
exit
#mysql< /TMP/mydb-fullbackup_200
#mysql testdb
myisam存储引擎;支持温备,备份时要锁定表;
-x, --lock-all-tables;锁定所有库的所有表;
-l, --lock-tables:锁定指定库所有表;
InnaDB存储引擎;支持温备或热备;
--single-transaction;创建一个事物,基于此快照执行备份;


第二节点;
创建数据库;
Mysql;
#CRANT ALL ON *.* TO 'admin'@'172.16.0.%' IDENTIFIED BY 'admin';
#FLUSH PRIVILEGES;
 #GRANT ALL ON *.* TO 'admin'@'%magedu.com' IDENTIFIED BY 'admin';

#FLUSH PRIVILEGES;

#EXIT

节点一;
Mysql -uadmin -172.16.0.68 -padmin < /tmp/mydb-testdb-mysql-fullbackup-2017-…..

节点二;
#mysql
SHOW DATABASES;

节点一;
#mysql;
Use mydb;
SHOW TABLE STATUS\G ----查看存储引擎命令;
SHOW TABLE STATUS WHERE Engine='Innodb'\G---过滤出Innodb存储引擎;

SHOW TABLE STATUS WHERE Engine!='Innodb'\G;----列出除Innodb引擎外的;

没有除Innodb的引擎,就可以进行热备;
Mysqldump --single-transaction --databases mydb----适用于单一的事物;----备份完成后自动关闭锁提交事务;
热备,不影响线上业务;

也可以使用温备;
-x 锁定所有库的表;
-l  锁定指定库的所有表;
在线的热备必须加选项.

其它选项;
 -R,--routines; 备份指定库的存储过程和储存函数;
--triggers ;        备份指定库的触发器;
-E,--events ;        备份指定库的事件调度器;

--master-data 此选项将备份的位置记录并将回放时自动从记录的位置往后回放;
--flush-logs; 恢复完成后在mysql二进制日志中自动滚动,生成新的二进制日志;
完整备份方式;
节点一;
  1、连接mysql;
#mysql
FLUSH TABLE WITH READ LOCK;  ----锁定所有库
FLUSH LOGS;                                    ----滚动一下二进制日志数据库
SHOW MASTER LOGS;                   -----查看二进制日志有几个;

SHOW MASTER STATUS;              ------现在处于那个文件的那个位置
Exit;

在命令行;
#mysqldump -x -R -E --triggers --all-databases --master-data=1||2 |less       ----可以查看执行后的内容;

1为创建数据库
2为注释掉;

#mysqldump -x -R -E --triggers --all-databases --master-data=2 --flush-logs > /tmp/alldatabases-fullbackup-$(date +%F-%H-%M-%S)

#less   /tmp/alldatabases-fullbackup-$(date +%F-%H-%M-%S                                -----查看备份的文件内容

连入数据库;
#mysql
Use mydb
CREATE TABLE teachers (tid INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,name VARCHAR(200));

INSERT INTO teachers (name) VALUES ('ouyang feng '),('song jiang');

HSOW MASTER STATUS

EXIT

#SYStemctl stop mariadb
#Cd /var/lib/mysql
#ll
#mysqlbinlog master-log.000005----读一下二进制文件;
在此前备份时以滚动过一次,所以000005二进制日志为新的二进制文件,备份时只需将000005二进制文件备份即可;

#mysqlbinlog master-log.000005> /tem/alldatabase-binlog

模拟服务器崩溃;
#Rm -rf /var/bin/mysql/*
#cd /var/bin/mysql
#ll
#systemctl start mariadb

连入mysql;
#mysql
SHOW DATABASES;
 
当将备份文件写入时,不需要写入操作的二进制日志,将二进制日志关闭;
Set @@session.sql_log_bin=OFF
\. /tmp/alldatabases-fullbackup-$(date +%F-%H-%M-%S                                 ----将备份的文件导入;

再将另一个二进制日志000005,导入到mysql中;
Set @@session.sql_log_bin=OFF
\. /tmp/alldatabases-fullbackup-000005

Use mydb
SHOW TABLES;

SELECT * FROM teachers;
Exit;

命令行;
Vim /etc/my.cf.d/server.cnf
将二进制文件启用;

二进制日志文件,可以再配置文件中修改启停,也可以在mysql连接中使用;
Set @@session.sql_log_bin=ON||OFF

恢复完成;

你可能感兴趣的:(mysqldump数据库恢复)