| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> Linux MySQL—备份与恢复 -> 正文阅读 |
|
[大数据]Linux MySQL—备份与恢复 |
备份类型冷备 热备 离线 在线? 物理 逻辑 一般分为物理备份(物理文件)和逻辑备份(sql语句) 物理备份 只要备份物理文件 速度快不跨平台 linux windos 逻辑备份 sql语句的备份 速度慢 跨平台 linxu sql --- > windos 还可以分为离线备份(物理)和在线备份(逻辑) 逻辑备份 不区分引擎
删掉data目录
初始化数据库(修改权限)
实验过程: 先做完全备份 模拟损坏: rm -rf /usr/local/mysql/data 修复: 1.杀掉进程 pkill mysqld 2.创建目录data 修改拥有者和所属组 并且初始化 mkdir /usr/local/mysql/data chown -R mysql.mysql /usr/local/mysql/ /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data 3.启动mysql systemctl restart mysqldd 4.修改密码 mysql -u root -p'密码' set password='123'; 5.恢复数据 mysql -uroot -p123 </backup/all.sql 导入导出
? 当secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出 ? 当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下 ? 当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制
表的导出和导入
lvm的快照(mysql备份)1.将lv挂载mysql数据目录data( 注意: 自动挂载 /etc/fstab)a. 先停止数据库;mv /usr/local/mysql/data /tmp b. 创建lv 并且挂载到 /usr/local/mysql/data c. mv /tmp/data/* /usr/local/mysql/data b. chown -R mysql.mysql /usr/local/mysql e. 启动数据库 2.保证数据完整(全备 完全恢复)3.锁库mysql> FLUSH TABLES WITH READ LOCK; 4.创建快照[root@robin data]# lvcreate -L 300M -s -n /dev/vgmysql/lvmysql-snampshot /dev/vgmysql/lvmysql 5.解锁mysql> unlock tables; 6.备份(tar)mount /dev/vgmysql/lvmysql-snampshot /opt [root@robin opt]# tar -cvf /backup/mysql.bak.tar /opt/* 7.删除快照[root@robin /]# umount /opt/ [root@robin /]# lvremove /dev/vgmysql/lvmysql-snampshot 恢复1.确定mysql进程结束[root@robin backup]# killall -9 mysqld 2.解压恢复[root@robin backup]# tar -xvf /backup/mysql.bak.tar -C /usr/local/mysql/data/ 问题: 1.锁表(时间不好估算) 2.快照大小 3.使用源lv时快照使用率会上升(服务器最空闲时) echo " FLUSH TABLES WITH READ LOCK; system lvcreate -L 300M -s -n /dev/vgmysql/lvmysql-snampshot /dev/vgmysql/lvmysql ; unlock tables" | mysql 二进制日志的使用log-binbinlog日志是把数据库的每一个变化都记载到一个专用的文件里,这种文件叫日志文件,mysql默认只打开错误日志文件,因为过多的日志会影响系统的处理性能 启用方法 1./usr/local/mysql/bin/mysqld_safe --log-bin --user=mysql& 2.vim /etc/my.cnf
max-binlog-size 的默认值时1GB 不能设置该值超过1GB 或者小于4096字节 1.开启binlog日志
查询日志状态mysql中
mysql中显示语句
系统中
binlog日志的模式1、Statement Level模式(早期默认)简介:每一条会修改数据的sql都会记录到master的bin-log中。Slave在复制的时候sql线程会解析成和原来master端执行过的相同语句来执行。 优点:不需要记录每一行数据的变化,减少bin-log的日志量,节约IO,提高性能。因为他只记录在master上所执行语句的细节,以及执行语句时候的上下文的信息。 缺点:很多新功能的加入在复制的时候容易导致出现问题。 delete from t1; 日志中直接显示语句
2、Row Level 模式:(默认)简介:日志中会记录成每一行数据被修改的模式,然后再slave 端在对相同的数据进行修改. 优点:在row level模式下,bin-log中可以不记录执行的sql语句的上下文相关的信息。仅仅只需要记录那一条记录被修改了。所以row level的日志内容会非常清楚记录下每一行数据修改的细节,非常容易理解。而且不会出现某些特点情况下的存储过程,或function 以及triggeer的调用和触发无法被正确复制的问题. 缺点:所有执行的语句当记录到日志中的时候,都将以每行记录的修改来记录,可能会产生大量的日志呢。 delete from t1; mysql> show global variables like '%binlog_format%'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | binlog_format | ROW | +---------------+-------+ 系统查看日志信息 [root@localhost data]# mysqlbinlog -v /usr/local/mysql/data/mysql.000001 mysql中查看语句 mysql> set binlog_rows_query_log_events=1; mysql> show binlog events\G *************************** 10. row *************************** Log_name: mysql.000001 Pos: 574 Event_type: Rows_query Server_id: 1 End_log_pos: 653 Info: # insert into t10 values(1,'robin'),(2,'zorro'),(3,'tom') *************************** 11. row *************************** 3、Mixed (前两种的混合模式):根据执行的每一条具体的sql语句来区分对待记录日志的形式; 如何设置模式: [mysqld] innodb_file_per_table=1 secure_file_priv = server-id=1 log_bin=mysql log_bin_index=mysql binlog_format={statement|row|mixed} binlog日志的切换 情况1: mysqld服务重新启动 情况2: mysql> flush logs; 情况3: [root@localhost data]# mysqladmin -u root -p123 'flush-logs' 查看其他日志 mysql> show binlog events in "mysql.000003"\G 模拟恢复: 日志和数据分离 [mysqld] innodb_file_per_table=1 secure_file_priv = server-id=1 log_bin=/mysql-log/master log_bin_index=/mysql-log/master binlog_format=row log-error=/mysql-log/localhost.err [root@localhost data]# mkdir /mysql_log [root@localhost data]# chown -R mysql.mysql /mysql_log 场景1:物理删除 1.完全备份做好 2.开启binglog日志 创建数据库zorro 创建表t1 插入数据3条 flush logs; 插入数据2条 flush logs; 模拟错误: rm -rf /usr/local/mysql/data/* 恢复: 1.恢复全备 停止mysql进程 关闭binlog日志 [root@localhost data]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data 登录并修改秘密(默认密码来自日志文件) mysql> set password=password("Robin_123"); 恢复all.sql [root@localhost data]# mysql -u root -pRobin_123 < /backup/all.sql [root@localhost data]# systemctl restart mysqldd binlog日志恢复数据 [root@localhost binlog]# mysqlbinlog /binlog/master.000001 | mysql -u root -p123 [root@localhost binlog]# mysqlbinlog /binlog/master.000002 | mysql -u root -p123 [root@localhost binlog]# mysqlbinlog /binlog/master.000003 | mysql -u root -p123 确认恢复成功 打开binlog,正常运行 场景2:逻辑删除 1.完全备份做好 2.开启binglog日志 创建数据库hello 创建表world 插入数据3条 删除2条数据 flush logs; 插入数据1条 删除所有数据 插入数据2条 删除1条数据 flush logs; 插入2条数据 恢复所有插入数据 完全恢复: 停止mysql进程 关闭binlog日志 [root@localhost data]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data 登录并修改秘密(默认密码来自日志文件) mysql> set password=password("Robin_123"); 恢复all.sql [root@localhost data]# mysql -u root -pRobin_123 < /backup/all.sql [root@localhost data]# systemctl restart mysqldd 恢复数据 [root@localhost binlog]# mysqlbinlog --stop-position=1486 master.000001 | mysql -u root -p123 [root@localhost binlog]# mysqlbinlog --start-datetime="2018-04-24 14:52:28" master.000002 | mysql -u root -p123 [root@localhost binlog]# mysqlbinlog master.000003 | mysql -u root -p123 echo "flush tables with read lock; system lvcreate -n lv_mysql_s -L 50M -s /dev/vg01/lv_mysql;unlock tables;" |mysql -p123 mysql解决启动问题 1. 是否存在mysql进程 netstat -anplt |grep :3306 ps -ef | grep mysql 2.权限问题 拥有者和所属组必须是mysql 包括目录下所有文件 ls -l /usr/local/mysql/data 3.看日志 /usr/local/mysql/data/主机名.err rpm包配置文件必须写log-error=/var/log/mysqld.log /var/log/mysqld.log |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 9:29:30- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |