正规的网站建设专业公司学校微网站模板下载地址
news/
2025/10/5 8:13:34/
文章来源:
正规的网站建设专业公司,学校微网站模板下载地址,个人网站备案需要什么资料,想做找人做网站原文#xff1a;https://www.toutiao.com/i6855460778359816715/平台#xff1a;头条作者#xff1a;程序员不就是0和1一、 备份恢复策略进行备份或恢复操作时需要考虑一些因素#xff1a;1、确定要备份的表的存储引擎是事务型还是非事务型#xff0c;两种不同的存储引擎备…原文https://www.toutiao.com/i6855460778359816715/平台头条作者程序员不就是0和1一、 备份恢复策略进行备份或恢复操作时需要考虑一些因素1、确定要备份的表的存储引擎是事务型还是非事务型两种不同的存储引擎备份方式在处理数据一致性方面是不太一样的。2、确定使用全备份还是增量备份。全备份的优点是备份保持最新备份恢复的时候可以花费更少的时间缺点是如果数据量大将会花费很多的时间并对系统造成较长时间的压力。增量备份相反只需要备份每天的增量日志备份时间少对负载压力也小缺点就是恢复的时候需要全备份加上次备份到故障前的所有日志恢复时间长一些。3、可以考虑采用复制的方法来做异地备份但不能代替备份它对数据库的误操作也无能为力。4、要定期做备份备份的周期要充分考虑系统可以承受的恢复时间。备份要在系统负载较小的时候进行5、确保 MySQL 打开 log-bin 选项有了 binlogMySQL 才可以在必要的时候做完整恢复或基于时间点的恢复或基于位置的恢复。6、经常做备份恢复测试确保备份是有效的是可以恢复的。二、 逻辑备份和恢复在 MySQL 中逻辑备份的最大优点是对于各种存储引擎都可以用同样的方法来备份而物理备份则不同不同的存储引擎有着不同的备份方法因此对于不同存储引擎混合的数据库逻辑备份会简单一点。1. 备份MySQL 中的逻辑备份是将数据库中的数据备份为一个文本文件备份的文件可以被查看和编辑。在 MySQL 中可以使用 mysqldump 工具来完成逻辑备份// 备份指定的数据库或者数据库中的某些表
shell mysqldump [options] db_name [tables]
// 备份指定的一个或多个数据库
shell mysqldump [options] --database DB1 [DB2,DB3...]
// 备份所有数据库
shell mysqldump [options] --all-database如果没有指定数据库中的任何表默认导出所有数据库中的所有表。示例1. 备份所有数据库shellmysqldump -uroot -p --all-database all.sql2. 备份数据库 testshellmysqldump -uroot -p test test.sql3. 备份数据库 test 下的表 empshell mysqldump -uroot -p test emp emp.sql4. 备份数据库 test 下的表 emp 和 deptshell mysqldump -uroot -p test emp dept emp_dept.sql5. 备份数据库test 下的所有表为逗号分割的文本备份到 /tmp:shell mysqlddump -uroot -p -T /tmp test emp --fields-terminated-by ,shell more emp.txt 1,z12,z23,z34,z4注意为了保证数据备份的一致性 myisam存储引擎在备份时需要加上-l参数,表示将所有表加上读锁在备份期间所有表将只能读而不能进行数据更新。但是对于事务存储引擎来说可以采用更好的选项 --single-transaction此选项使得 innodb 存储引擎得到一个快照(snapshot)使得备份的数据能够保证一致性。2. 完全恢复mysqldump 的恢复也很简单将备份作为输入执行即可mysql -uroot -p db_name backfile注意将备份恢复后数据并不完整还需要将备份后执行的日志进行重做mysqlbinlog binlog-file | mysql -uroot -p完整的 mysqldump 备份与恢复示例1. 凌晨 2:00备份数据库rootbogon:/usr/local/mysql/bin$ ./mysqldump -uroot -p -l -F t2 t2.dmp
Enter password:其中 -l参数表示给所有表加读锁-F表示生成一个新的日志文件此时t2 中 emp 表的数据如下# 为了便于测试执行 reset master 删除所有 binlog。
MySQL [(none)] reset master;
Query OK, 0 rows affected (0.00 sec)
# 此时只有一个 binlog 日志文件 mysql-bin.000001
MySQL [t2] select * from test;
------------
| id | name |
------------
| 1 | a |
| 2 | b |
------------
2 rows in set (0.00 sec)2. 备份完毕后插入新的数据# 因为上一步执行是加入了 -F 选项, 所以接下来的操作会被记录到新的二进制文件即名为 mysql-bin.000002 的文件
MySQL [t2] insert into test values (3,c);
Query OK, 1 row affected (0.00 sec)
MySQL [t2] insert into test values (4,d);
Query OK, 1 row affected (0.00 sec)3. 数据库突然故障(其实是小伙伴没事儿删库练手玩儿)数据无法访问。需要恢复备份删库跑路# 这里为了便于测试不把删库操作记入日志当前 session 设置 sql_log_bin 为 off。
# 删库后执行 flush logs让后续的 binlog 到新的文件中即名为 mysql-bin.000003中
MySQL [t2] set sql_log_bin 0;
Query OK, 0 rows affected (0.00 sec)
MySQL [t2] show variables like %sql_log_bin%;
----------------------
| Variable_name | Value |
----------------------
| sql_log_bin | OFF |
----------------------
1 row in set (0.00 sec)
MySQL [t2] drop database t2;
Query OK, 1 row affected (0.01 sec)
MySQL [(none)] flush logs;
Query OK, 0 rows affected (0.22 sec)
MySQL [t2] drop database t2;
Query OK, 3 rows affected (0.23 sec)
MySQL [(none)] exit;
Bye数据恢复rootbogon:/usr/local/mysql/bin# ./mysql -e create database t2
rootbogon:/usr/local/mysql/bin# ./mysql t2 t2.dmp
*******************************************************************
MySQL [t2] select * from test;
------------
| id | name |
------------
| 1 | a |
| 2 | b |
------------
2 rows in set (0.00 sec)4. 使用 mysqlbinlog 恢复自 mysqldump 备份以来的 binglog根据前面操作的内容可知从备份的时间点到删库的时间点之间的操作被记录到了 mysql-bin.000002 文件中rootbogon:/usr/local/mysql/bin# ./mysqlbinlog --no-defaults /data/mysql/mysql-bin.000002 | ./mysql t2
*******************************************************
MySQL [t2] select * from test;
------------
| id | name |
------------
| 1 | a |
| 2 | b |
| 3 | c |
| 4 | d |
------------
4 rows in set (0.00 sec)至此数据恢复成功。3. 基于时间点恢复由于误操作比如误删除了一张表这时使用完全恢复时没有用的因为日志里面还存在误操作的语句我们需要的是恢复到误操作之前的状态然后跳过误操作语句再恢复后面执行的语句完成恢复。这种恢复叫不完全恢复在 MySQL 中不完全恢复分为 基于时间点的恢复和基于位置的恢复。基于时间点恢复的操作步骤(1) 如果是上午 10 点发生了误操作可以用以下语句用备份和 binlog 将数据恢复到故障前shellmysqlbinlog --stop-date2017-09-30 9:59:59 /data/mysql/mysql-bin.123456 | mysql -uroot -ppassword(2) 跳过故障时的时间点继续执行后面的 binlog完成恢复。shellmysqlbinlog --start-date2017-09-30 10:01:00 /data/mysql/mysql-bin.123456 | mysql -uroot -ppassword4. 基于位置恢复和基于时间点的恢复类似但是更精确因为同一个时间点可能有很多条 sql 语句同时执行。恢复的操作步骤如下(1) 在 shell 下执行命令shellmysqlbinlog --start-date2019-09-30 9:59:59 --stop-date2019-09-30 10:01:00/data/mysql/mysql-bin.123456 /tmp/mysql_restore.sql该命令将在 /tmp 目录创建小的文本文件编辑此文件知道出错语句前后的位置号例如前后位置号分别为 368312 和 368315。(2) 恢复了以前的备份文件后应从命令行输入下面的内容shellmysqlbinlog --stop-position368312 /data/mysql/mysql-bin.123456 | mysql -uroot -ppassword
shellmysqlbinlog --start-position368315 /data/mysql/mysql-bin.123456 | mysql -uroot -ppassword上面的第一行将恢复到停止位置为止的所有事务。下一行将恢复从给定的起始位置直到二进制日志结束的所有事务。因为 mysqlbinlog 的输出包括每个 sql 语句记录之前的 set timestamp 语句因此恢复的数据和相关的 mysql 日志将反映事务执行的 原时间。三、 表的导入导出在数据库的日常维护中表的导入导出时很频繁的一类操作。1. 导出在某些情况下为了一些特定的目的经常需要将表里的数据导出为某些符号分割的纯数据文本而不是 sql 语句1、用来作为 Excel 显示2、单纯为了节省备份空间3、为了快速的加载数据load data 的加载速度比普通 sql 加载要快 20 倍以上。使用 select ...into outfile ... 命令来导出数据具体语法如下mysql select * from tablename into outfile target_file [option];其中 option 参数可以是以下选项fields terminated by string // 字段分隔符默认为制表符t
fields [optionally] enclosed by char // 字段引用符如果加 optionally 选项则只用在 char、varchar 和 text 等字符型字段上默认不使用引用符
fields escaped by ‘char’ // 转移字符、默认为
lines starting by string // 每行前都加此字符串默认
lines terminated by string // 行结束符默认为n
# char 表示此符号只能是单个字符string表示可以是字符串。例如将 test 表中数据导出为数据文本其中字段分隔符为“,”,字段引用符为“”,记录结束符为回车符MySQL [t2] select * from test into outfile /data/mysql/outfile.txt fields terminated by , enclosed by ;Query OK, 4 rows affected (0.02 sec)zjbogon:/data/mysql$ more outfile.txt1,a,helloworld2,b,helloworld3,c,helloworld4,d,helloworld发现第一列是数值型如果不希望字段两边用引号引起则语句改为MySQL [t2] select * from test into outfile /data/mysql/outfile2.txt fields terminated by , optionally enclosed by ;Query OK, 4 rows affected (0.03 sec)zjbogon:/data/mysql$ more outfile2.txt1,a,helloworld2,b,helloworld3,c,helloworld4,d,helloworld测试转义字符MySQL 导出数据中需要转义的字符主要包括以下 3 类1、转义字符本身 2、字段分隔符 3、记录分隔符MySQL [t2] update test set content ##!aa where id1;Query OK, 1 row affected (0.05 sec)Rows matched: 1 Changed: 1 Warnings: 0MySQL [t2] select * from test into outfile /data/mysql/outfile3.txt fields terminated by , optionally enclosed by ;Query OK, 4 rows affected (0.03 sec)*******************************************zjbogon:/data/mysql$ more outfile3.txt1,a,##!aa2,b,helloworld3,c,helloworld4,d,helloworld1、当导出命令中包含字段引用符时数据中含有转义字符本身和字段引用符的字符需要被转义2、当导出命令中不包含字段引用符时数据中含有转义字符本身和字段分割符的字符需要被转义。注意select ... into outfile ... 产生的输出文件如果在目标目录下有重名文件将不会被创建成功源文件不会被自动覆盖。使用 mysqldump 导出数据为文本的具体语法如下mysqldump -u username -T target_dir dbname tablename [option]其中option 参数可以是以下选项1、--fields-terminated-byname (字段分隔符)2、--fields-enclosed-byname (字段引用符)3、--fields-optionally-enclosed-byname (字段引用符只用在 char、varchar 和 test 等字符型字段上)4、--fields-escaped-byname (转义字符);5、--lines-terminated-byname (记录结束符);例子可以发现除多了一个表的创建脚本文件mysqldump 和 select ... into outfile ... 的选项和语法非常相似。其实 mysqldump 实际调用的就是后者提供的接口并在其上面添加了一些新的功能而已。2. 导入导入用 select ... into outfile 或者 mysqldump 导出的纯数据文本和导出类似导入也有两种不同的方法分别是 load data infile... 和 mysqlimport它们的本质是一样的区别只是在于一个在 MySQL 内部执行另一个在 MySQL 外部执行。使用 “load data infile...” 命令具体语法如下mysql load data [local]infile filename into table tablename [option]option 可以是以下选项1、fields terminated by string (字段分割符默认为制表符t);2、fields [optionally] enclosed by char (字段引用符如果加 optionally 选项则只用在 char varchar text 等字符型字段上。默认不使用引用符)3、fields escaped by char (转义字符默认为)4、lines starting by string (每行前都加此字符串默认为)5、lines terminated by string (行结束符默认为n)6、ignore number lines (忽略输入文件中的前几行数据)7、(colnameoruservar,...) (按照列出的字段顺序和字段数量加载数据)8、set col_name expr,...将列做一定的数值转换后再加载。fields 、lines 和前面 select...into outfile...的含义完全相同不同的是多了几个不同的选项下面的例子将文件test.txt中的数据加载到表 test 中:如果不希望加载文件中的前两行可以进行如下操作使用 mysqldump 实现shell mysqlimport -uroot -p [--local] dbname order_tab.txt [option]其中option 参数可以是以下选项1、fields-terminated-byname (字段分隔符) 2、fields-enclosed-byname (字段引用符) 3、fields-optionally-enclosed-byname (字段引用符只用在 char、varchar、text等字符型字段上) 4、fields-escaped-byname (转义字符) 5、lines-terminated-byname (记录结束符) 6、ignore-linesnumber (忽略前几行)注意如果导入和导出是跨平台操作的windows 和 linux那么要注意设置参数 line-terminated-bywindows 上设置为 line-terminated-byrn, linux 上设置为 line-terminated-byn。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/928024.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!