MySQL备份恢复与日志

Mysql数据库----日志的备份与恢复 日志 概述 备份的主要目的是灾难恢复,备份还可以测试应用、回滚数据修改、查询历史数据、审计等。 而备份、恢复中,目志起到了很重要的作用 日志类型 mysgl日志文件 常用的自志文件(在/etc/my.cnf中[mysqld]客户端配置中修改)认在/usr/ local/ mysql/data/中 错误日志 用于记录Mysql 启动、停止、或运行时产生的错误信息,默认开启可通过以下字段进行修改 log-error=/usr/ local/mysal/data/mysql_erlor.log #指定日志的保存位 阅读详情

MySQL 数据库的备份与恢复

1.1 备份数据的意义

第一是保护公司的数据,第二是网站7*24小时提供服务

1.2 备份单个数据库参数使用

MySQL数据库自带了一个很好用的备份命令,就是mysqldump,它的基本使用如下;
语法:mysqldump -u 用户名 -p  数据库名 > 备份的文件名
  1. mysqldump -uroot -p123456 -S /data/3306/mysql.sock oldboy >/opt/oldboy_$(date +%F).sql
我们可以使用grep 查看我们都备份了些什么东西
  1. [root@db02 oldboy]# egrep -v "#|\*|--|^$" /opt/oldboy_2016-06-22.sql
  2. DROP TABLE IF EXISTS `student`;
  3. CREATE TABLE `student` (
  4.   `id` int(4) NOT NULL AUTO_INCREMENT,
  5.   `name` char(20) NOT NULL,
  6.   `age` tinyint(2) NOT NULL DEFAULT '0',
  7.   `dept` varchar(16) DEFAULT NULL,
  8.   PRIMARY KEY (`id`),
  9.   KEY `index_name` (`name`),
  10.   KEY `index_age` (`name`(8)),
  11.   KEY `ind_name_dept` (`name`,`dept`)
  12. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  13. LOCK TABLES `student` WRITE;
  14. UNLOCK TABLES;
  15. DROP TABLE IF EXISTS `test`;
  16. CREATE TABLE `test` (
  17.   `id` int(4) NOT NULL AUTO_INCREMENT,
  18.   `name` char(20) NOT NULL,
  19.   PRIMARY KEY (`id`)
  20. ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
  21. LOCK TABLES `test` WRITE;
  22. INSERT INTO `test` VALUES (1,'oldboy'),(2,'oldgirl'),(3,'inca'),(4,'zuma'),(5,'kaka');
  23. UNLOCK TABLES;
小结:mysqldump就是备份了我们的sql语句
mysqldump常用参数说明:

参数

说明

-A

备份所有数据库

-B

增加创建数据库和连接数据库的语句

-t

只备份数据

-d

只备份库表结构

-T

分离库表和数据成不同的文件,数据是文本,非SQL语句

-x

锁表 禁止写入数据

-F

刷新binlog日志,生成新的文件,将来增量恢复使用

我们这里只是简单的介绍了一下mysqldump的参数,更多参数可以参考本站的mysqldump参数介绍

1.3 常用命令介绍

-B 

使用-B 参数

mysqldump
-uroot -p123456 -S /data/3306/mysql.sock -B oldboy >/opt/oldboy_B_$(date
+%F).sql

不使用-B 参数

[root@db02
oldboy]# mysql -uroot -p123456 -S /data/3306/mysql.sock
</opt/oldboy_2016-06-22.sql 

小结:如果不加-B 恢复的时候需要提前创建好数据库并指定

–compact
测试时用的比较多,可以优化输出内容的大小,让容量更少,适合调试
参数说明:该选项使得输出内容更简洁,不包括默认选项中各种注释,有如下几个参数。–skip-add-drop-table –no-set-names
–skip-disable-keys –skip-add-locks
语法如下:
  1. mysqldump -uroot -p123456 -S /data/3306/mysql.sock -B oldboy --compact >/opt/123.sql
gzip
  1. mysqldump -uroot -p123456 -S /data/3306/mysql.sock -B oldboy|gzip>/opt/123.sql.gz
  2. -rw-r--r--  1 root root  899 Jun 22 17:34 123.sql.gz
  3. -rw-r--r--  1 root root 1014 Jun 22 17:27 123.sql
使用gzip压缩打包文件效率是不压缩的3倍

以上参数小结

  1. 备份数据使用-B参数,会在备份数据中增加建库的语句。
  2. 备份数据使用-B参数,后面可以直接接多个库名
  3. 用gzip对备份的数据压缩,可以提高效率
  4. debug时可以用–compact减少输出,但不用于生产
  5. 指定字符集备份用–default-character-set=latin1(一般不用此字符集)

mysqldump的工作原理?

利用mysqldump命令备份数据的过程,实际上就是把数据从mysql库里以逻辑的sql语句的形式直接输出或生产备份文件的过程
备份多个库语法如下:
  1. mysqldump -uroot -p123456 -S /data/3306/mysql.sock -B oldboy wordpress >/opt/123.sql
  2. 提示:使用mysqldump是把数据库的数据导出通过sql语句的形式存储,这种备份方式成称为逻辑备份,效率不是很高,一般50G以内的数据。
  3. 其他的备份方式:物理备份cp、tar(停库),xtrabackup

1.4 如果做分库分表

分库备份实际上就是执行一个备份语句备份一个库,如果数据库里有多个库,就执行多条相同的备份单个的备份语句就可以备份多个库了。注意每个库都可以对应备份的库作为库名,结尾加sql备份多个库的命令如下:
  1. mysqldump -uroot -p123456 -B oldboy
  2. mysqldump -uroot -p123456 -B oldboy_gbk

分库的备份语法:

先取出我们要备份的库
  1. [root@db02 oldboy]# mysql -uroot -p123456 -S /data/3306/mysql.sock -e "show databases;"|egrep -v "Database|_schema|mysql"
  2. cyh
  3. oldboy
  4. oldboy123
  5. oldboy_gbk
  6. wordpress

执行命令,进行批量备份

  1. mysql -uroot -p123456 -S /data/3306/mysql.sock -e "show databases;"|egrep -v "Database|_schema|mysql"|sed -r 's#^(.*)#mysqldump -uroot -p123456 -S /data/3306/mysql.sock -B \1 >/tmp/\1.sql.gz#g'|bash

 查看最后结果

  1. [root@db02 tmp]# ll
  2. total 20
  3. -rw-r--r-- 1 root root    0 Jun 21 11:55 bak.sql
  4. -rw-r--r-- 1 root root 1382 Jun 22 17:55 cyh.sql.gz
  5. -rw-r--r-- 1 root root 1406 Jun 22 17:55 oldboy123.sql.gz
  6. -rw-r--r-- 1 root root 1409 Jun 22 17:55 oldboy_gbk.sql.gz
  7. -rw-r--r-- 1 root root 2808 Jun 22 17:55 oldboy.sql.gz
  8. -rw-r--r-- 1 root root 1406 Jun 22 17:55 wordpress.sql.gz
提示:可以使用for循环进行备份
备份单个表
  1. mysqldump -uroot -p123456 -S /data/3306/mysql.sock oldboy test >/opt/test.sql
备份多个表
  1. mysqldump -uroot -p123456 -S /data/3306/mysql.sock oldboy test cyh>/opt/test.sql
[提示]只要不加-B 前面是库,后面的都是表
只显示表结构
  1. mysqldump -uroot -p123456 -S /data/3306/mysql.sock oldboy test  -d >/opt/test.sql
直接备份数据 -t参数
  1. mysqldump -uroot -p123456 -S /data/3306/mysql.sock oldboy test  -t>/opt/test.sql
备份数据库表结构(不包含数据)

利用mysqldump -d 参数只备份表的结构,例:备份oldboy所有表结构

  1. mysqldump -uroot -p123546 -B -d oldboy >/opt/t.sql
语句和数据分离,数据为文本 -T -tab=name
  1. mysqldump -uroot -p123456 oldboy student –compact –tab=/tmp/
  2. cat /tmp/student.txt
  3. oldboy
  4. oldgirl
  5. inca
  6.  zuma
刷新binlog

mysqldump用于定时对某一时刻的数据的全备,例如:00点进行备份back.sql.gz

增量备份:当有数据写入到数据库时,还会同时把更新的SQL语句写入到对应的文件里这个就叫做binlog文件

  1. mysqldump -uroot -p123456 -S /data/3306/mysql.sock oldboy test -F --compact
  2. -F 在/data/3306就会记录mysql-bin.000005 按照循序设置,刷新binglog日志,在备份之后立刻刷新binlog日志

刷新binlog介绍
  1. binlog是记录数据库更新的SQL语句,二进制文件
  2. mysqldump永不定时对某一时刻数据的全备,例如:00点进行备份bak.sql.gz
  3. 增量备份:当有数据写入到数据库时,还会同时把更新的SQL语句写入到对应的文件里
  4. 这个文件就叫做binlog文件
例子:10点丢失数据需要恢复数据;
  • 00点时刻备份的bak.sql.gz 数据还原到数据库,这个时候恢复到了00点
  • 00点-10:00数据,就要从binlog里恢复
binlog文件生效需要有一个参数:binlog
binlog日志切割:确定全备和增量的临界点
  • -F 刷新binlog日志,生成新文件,将来恢复从这个文件开始。
  • –maser-data在备份语句里添加CHANGE MASTER语句及binlog文件位置点信息
  • 值为1=可执行的CHANGE MASTER语句
  • 值为2=注释的–CHANGE MASTER语句
  • –master-data除了增量恢复确定临界点外,做主从复制时作用更大。

1.5 生产场景不同引擎mysqldump备份命令

MyISAM引擎企业生产备份命令(适合所有引擎和混合引擎)
  1. mysqldump -uroot -poldboy123 -A -B -F -R --master-data=2 -x --events|gzip >/opt/all.sql.gz
  2. 提示:-F 也可以不用,与--master-data有些重复
innoDB引擎企业生产备份命令;推荐使用的
  1. mysqldump -uroot —poldboy123 -A -B -F -R --master-data=2 --events --single-transaction|gzip >/opt/all.sql.gz
  2. 提示:-F 也可以不用,与--master-data
额外补充:
(一)mysqldump逻辑备份说明
缺点:效率不是特别高。
优点:简单、方便、可靠、迁移
适用于数据量不是特别大的场景,打包前50G以内数据
(二)超过50G可选方案
1、xtrabackup物理备份工具:全量和增量(支持热备)
2、物理备份方案:从库停止SQL线程,打包,cp
数据库恢复事项
提示:
1.数据恢复和字符集关联很大,如果字符集不正确会导致恢复的数据乱码
2.mysql命令以及source命令恢复数据库的原理就是把文件的sql语句,在数据库重新执行的过程
小技巧
  1. Mysql>system ls -l /opt/  可以跳出mysql查看命令
  2. Mysql>source /opt/oldboy_B.sql  直接接路径就可以恢复
  3. source数据恢复和字符集关联很大,如果字符集不正确会导致恢复的数据乱码
  4. UTF8数据库,那么恢复的文件格式需要为"UTF8-没有签名"格式,txt右击另存为设置

1.6 MySQL恢复命令

针对压缩的备份数据恢复;
1、方法
  1. gzip -d /opt/mysql.sql.gz
  2. mysql -uroot -poldboy </opt/mysql.sql
  3. 不删除源备份文件:
  4. gzip -cd 01.sql.gz >2.sql
2、方法
  1. gunzip<b_bak.sql.gz>/opt/mysql.sql
  2. mysql -uroot -poldboy </opt/mysql.sql
  3. 或者
  4. gunzip <b_bak.sql.gz|mysql -uroot -poldboy123
恢复总结:
1、source命令
2、mysql命令

1.7 实现和MySQL非交互式对话

1.7.1 利用mysql -e 参数查看mysql数据

  1. [root@www ~]# mysql -uroot -p -e "show databases;"
  2. Enter password: 
  3. +--------------------+
  4. | Database           |
  5. +--------------------+
  6. | information_schema |
  7. | bbs                |
  8. | mysql              |
  9. | performance_schema |
  10. | test               |
  11. | wordpress          |
  12. +--------------------+
查看完整的线程状态,此参数才查看慢查询语句是非常有用
  1. [root@www ~]# mysql -uroot -p -e "show full processlist;"
  2. Enter password: 
  3. +-----+------+-----------+------+---------+------+-------+-----------------------+
  4. | Id  | User | Host      | db   | Command | Time | State | Info                  |
  5. +-----+------+-----------+------+---------+------+-------+-----------------------+
  6. | 797 | root | localhost | NULL | Query   |    0 | NULL  | show full processlist |
  7. +-----+------+-----------+------+---------+------+-------+-----------------------+
企业案例:mysql sleep线程过多的问题案例
  1. mysql> show processlist;
  2. mysql>kill 89;  可以使用kill 杀死进程
=============================================
mysql sleep线程过多问题
在配置文件修改:
  1. [mysqld]
  2. interactive_timeout = 120  <==此参数设置后wait_timout自动失效
  3. wait_timeout = 120
其他方法:
1、PHP程序中,不使用持续连接,即使用mysql_connect而不是pconnect(JAVA调整连接池)
2、PHP程序执行完毕,应该显示调用mysql_close
3、逐渐分析MySQL的SQL查询及慢查询日志,找到查询过慢的SQL,优化

1.8 不重启数据库修改数据库参数

不重启数据库修改数据库参数,但是要求重启后还能生效
  1. shell>mysql -uroot -poldboy -e "show variables;"|grep key_buffer
  2. key_buffer_size 16384
  3. shell>mysql -uroot -poldboy -e "set global key_buffer_size = 1024*32;"
  4. shell>mysql -uroot -poldboy -e "show variables;"|grep key_buffer
  5. key_buffer_size 32768
  6. shell>sed -n '32p' /etc/my.cnf
  7. key_buffer_size = 16K
  8. shell>sed -i 's#key_buffer_size = 16K#key_buffer_size = 32K#g' /etc/my.cnf

查看数据库参数是否生效

  1. mysql -uroot -p123456 -S /data/3306/mysql.sock -e "show variables\G"
  2. [root@db02 opt]# mysql -uroot -p123456 -S /data/3306/mysql.sock -e "show variables like '%server_id%';"
  3. +---------------+-------+
  4. | Variable_name | Value |
  5. +---------------+-------+
  6. | server_id     | 1     |
  7. +---------------+-------+

查看my配置文件有没有在数据库中生效

 

  1. [root@db02 opt]# mysql -uroot -p123456 -S /data/3306/mysql.sock -e "show variables like '%log_bin%';"
  2. +---------------------------------+-------+
  3. | Variable_name                   | Value |
  4. +---------------------------------+-------+
  5. | log_bin                         | ON    |
  6. | log_bin_trust_function_creators | OFF   |
  7. | sql_log_bin                     | ON    |
  8. +---------------------------------+-------+
  9. [root@db02 opt]# mysql -uroot -p123456 -S /data/3306/mysql.sock -e "show variables like '%slow_%';"
  10. +---------------------+-------------------------------+
  11. | Variable_name       | Value                         |
  12. +---------------------+-------------------------------+
  13. | log_slow_queries    | OFF                           |
  14. | slow_launch_time    | 2                             |
  15. | slow_query_log      | OFF                           |
  16. | slow_query_log_file | /data/3306/data/db02-slow.log |
  17. +---------------------+-------------------------------+
索引缓冲区
  1. [root@db02 opt]# mysql -uroot -p123456 -S /data/3306/mysql.sock -e "show variables like '%key_buffer%';"
  2. +-----------------+----------+
  3. | Variable_name   | Value    |
  4. +-----------------+----------+
  5. | key_buffer_size | 16777216 |
  6. +-----------------+----------+

修改索引缓冲区的大小

  1. set global key_buffer_size = 1024*1024*32;
  2. root@oldboy 11:03:59->show variables like '%key_buffer%';
  3. +-----------------+----------+
  4. | Variable_name   | Value    |
  5. +-----------------+----------+
  6. | key_buffer_size | 33554432 |
  7. +-----------------+----------+
  8. 1 row in set (0.00 sec)
不重启数据库更改数据库参数小结:
1、set global key_buffer_size = 1024*1024*32;  #<==及时生效,重启mysql失效
2、配置文件也要改,编辑/etc/my.cnf,修改key_buffer_size = 32M
1.9 生产场景通常重要命令小结
  1. show processlist;  #查看数据库正在执行的SQL语句,可能无法看全完整SQL语句
  2. show full prcesslist #查看正在执行的完整SQL语句,完整显示
  3. set global key_buffer_size = 1024*1024*32  #不重启数据库调整数据库参数,直接生效,重启后失效、
  4. show variables;  #查看数据库的配置参数信息,例如:my.cnf里参数的生效情况
  5. kill ID     #杀掉SQL线程的命令,ID为线程号
  6. show session status  #查看当前会话的数据库状态信息
  7. show global status;  #查看整个数据库运行状态信息,很重要。要分析并做好监控
  8. show status;    #mysql运行状态
  9. show engine innodb status; #显示InnoDB 引擎的性能状态(早起版本show innodb status)
查看select进行的查看次数
  1. root@oldboy 11:22:46->show global status like '%select%';      
  2. +------------------------+-------+
  3. | Variable_name          | Value |
  4. +------------------------+-------+
  5. | Com_insert_select      | 0     |
  6. | Com_replace_select     | 0     |
  7. | Com_select             | 264   |            
  8. | Select_full_join       | 0     |
  9. | Select_full_range_join | 0     |
  10. | Select_range           | 7     |
  11. | Select_range_check     | 0     |
  12. | Select_scan            | 287   |
  13. +------------------------+-------+
  14. 8 rows in set (0.00 sec)
查看查询和写入的次数
  1. [root@db02 opt]# mysql -uroot -p123456 -S /data/3306/mysql.sock -e "show status ;"|grep -E "select|insert"
  2. Com_insert     0
  3. Com_insert_select  0
  4. Com_replace_select       0
  5. Com_select     1
  6. Delayed_insert_threads 0
  7. Innodb_rows_inserted   117
  8. Qcache_inserts      58
过滤出innodb引擎的参数
  1. [root@db02 opt]# mysql -uroot -p123456 -S /data/3306/mysql.sock -e "show status ;"|grep -E "select|insert"
  2. Com_insert     0
  3. Com_insert_select  0
  4. Com_replace_select       0
  5. Com_select     1
  6. Delayed_insert_threads 0
  7. Innodb_rows_inserted   117
  8. Qcache_inserts      58
查看引擎innodb状态
  1. show gengine innodb status\G

MySQL工具mysqlbinlog

2.1 mysql的binlog日志是什么?

mysql数据目录下的如下文件就是mysql的binlog日志
  1. 多实例路径:/data/3306/
  2. mysql-bin.00001
  3. mysql-bin.00002
  4. mysql-bin.00003
  5. mysql-bin.00004
  6. mysql-bin.00005
需要在配置文件中开启次功能
  1. grep log-bin my.cnf
  2. log-bin = /data/3306/mysql-bin
主要作用:用于数据库的主从复制以及数据的增量恢复    

2.2 mysqlbinlog工具解析binlog日志实践

默认情况binlog日志是二进制格式的,不能使用查看文本工具的命令来查看,例如:cat vi vim
2.3 解析指定库的binlog日志
范例:利用mysqldump -d参数解析指定库的binlog日志
  1. shell>mysqlbinglog -d oldboy mysql-bin.00001 -r oldboy.sql
  2. 提示:-r代表>输出内容 -d 指定库文件
mysql-bin.000001内容介绍
  1. # at 2154
  2. #160630  7:45:07 server id 1  end_log_pos 2253 Query thread_id=11 exec_time=0 error_code=0
  3. SET TIMESTAMP=1467243907/*!*/;
  4. create database qqqqqqq41233
  5. /*!*/;
  6. DELIMITER ;
  7. # End of log file
  8. ROLLBACK /* added by mysqlbinlog */;
  9. /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
  10. /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

按照位置截取:确定

  1. # at 2154
  2. #160630  7:45:07
  3. mysqlbinlog mysql-bin.000001 --start-position=2156 --stop-position=3000 -r pos.sql
  4. 其中,--start-posistion可以在配置文件中不存在,那时候取值将会取最接近2156的值

按照时间截图:模糊,不准

  1. mysqlbinlog mysql-bin.00001 --start-datetime='2016-10-16 17:14:15' --stop-datetime='2014-10-16 17:15:15' -r time.sql
  2. 指定开始时间,不指定结束时间,将从开始时间一直到最后
  3. mysqlbinlog mysql-bin.000001 --start-datetime='2016-10-16 17:14:15' -r time.sql
  4. 指定结束时间,不指定开始时间,将从开始一直到指定的结束时间
  5. mysqlbinlog mysql-bin.000002 --stop-datetime='2016-10-16 17:14:15' -r time.sql

mysqlbinlog命令

1、把binlog解析为sql语句(包含位置和时间点)
2、-d参数genuine指定库拆分binlog(拆分单表binlog可通过SQL关键字过滤)
3、通过位置参数获取部分binlog: –start-position=301 –stop-position=305。精准定位取部分内容
4、通过时间参数截取部分binlog,–start-datetime=’2016-10-16 17:14:15′
–stop-datetime=’2016-10-16 17:17:17’,模糊取部分内容,会丢失数据。
5、-r 文件名,相当于”>文件名”
6、解析ROW级别binlog日志的方法。
  1. mysqlbinlog --base64-ouput=decode-rows-v mysql-bin.00001
  2. mysqlbinlog --base64-ouput="decode-rows" --verbose-mysql-bin.00001

2.3 错误日志(error log)介绍与调整

1.错误日志(error log)介绍
MySQL的错误日志(error log)记录MySQL服务进程mysqld在启动/关闭或运行过程中遇到的错误信息
2.错误日志(error log)实践

法1:在配置文件中调整方法,当然可以在启动时加入启动参数

  1. [mysqld_safe]
  2. log-error=/data/3306/mysql_oldboy3306.err

法2:启动MySQL命令里加入:

  1. mysqld_safe --default-file=/data/3306/my.cnf --log-error=/data/3306/mysql_oldboy.err &
  2. root@oldboy 10:09:14->show variables like '%log_error%';
  3. +---------------+---------------------------------+
  4. | Variable_name | Value                           |
  5. +---------------+---------------------------------+
  6. | log_error     | /data/3306/mysql_oldboy3306.err |
  7. +---------------+---------------------------------+
  8. 1 row in set (0.04 sec)

新装MySQL服务,无法启动排查思路

1.把/data/3306/data 目录删除后重新建立data目录并加属主属组
2.把原有的my.cnf,mysql这两个也重新还原过
3.重新用mysqld_safe启动过
4.改过my.cnf里面server-id = 2
5.配置文件里面的端口,思路

步骤———————————-

1、先把日志文件备份并清空启动一下mysql服务然后再查看日志文件报有什么错误?
  1. [root@db02 3306]# cat mysql_oldboy3306.err
  2. 160616 16:46:07 mysqld_safe Starting mysqld daemon with databases from /data/3306/data
2、然后mysql3306目录下面所有文件都加上属主并是递归-R
  1. [root@db02 3306]# chown -R mysql *
3、然后查看一下有没有mysql 这个ID
  1. [root@db02 3306]# id mysql
  2. uid=502(mysql) gid=502(mysql) groups=502(mysql)
4、重新启动mysql服务(多实例)
  1. [root@db02 3306]#/data/3306/mysql start
5、此时再查看一下服务有没有启动起来
  1. [root@db02 3306]#lsof -i:3306

2.4 查询日志(也可以叫做访问日志)

  1. [root@db02 ~]grep gene /data/3306/my.cnf
  2. general_log = on
  3. general_log_file = /data/3306/data/MySQL_oldboy.log
会记录mysql所有的操作
提示:高并发场景企业里普通查询日志一般是关闭的(默认也是关闭)主要因为IO性能问题
2.5 慢查询日志(slow query log )介绍与调整*****
1.慢查询日志(slow query log)介绍
慢查询日志(slow query log);记录执行时间超出指定值(long_query_time)的SQL语句
2.慢查询日志(slow query log)调整
  1. long_query_time=超过指定时间查询(看公司要求,通常2秒)
  2. log-slow-queries= 日志路径
  3. log_queries_not_using_indexes=不使用索引
慢查询的设置,对于数据库SQL的优化非常重要
  1. [root@db02 oldboy]# egrep "quer" /data/3306/my.cnf|tail -3
  2. long_query_time = 1
  3. log-slow-queries = /data/3306/slow.log
  4. log_queries_not_using_indexes

2.6 慢查询日志切割

  1. shell>cat /server/scripts/cut_slow_log.sh
  2. cd /data/3306/ &&\
  3. /bin/mv slow.log slow.log.$(date +%F)&&\
  4. mysqladmin -uroot -poldboy123 -S /data/3306/mysql.sock flush-log
  5. shell>tail -2 /var/spool/cron/root
  6. #cut mysql slow log
  7. 00 00 * * * /bin/sh /server/scripts/cur_slow_log.sh >/dev/null 2>&1

使用explain优化SQL语句(select语句)的基础流程;

1.抓慢查询SQL语句方法:

a. show full prcesslist;(登录数据库现场抓,连续执行2次,超过2秒)
mysql -uroot -poldboy -S /data/3306/mysql.sock -e “show full processlist;”|egrep -vi “sleep”
b.分析慢查询日志
配置参数记录慢查询语句

2.explain语句检查索引执行情况

大表不能高峰期建立索引,300万条记录

3.分析慢查询的工具mysqlsla(每天早上发邮件)

切割慢查询日志,去重分析后发给领导及相关部门
1)mv,reload进程。2)cp,>清空
  1. shell>mv /data/3306/slow.log /opt/$(date +%F)_slow.log
  2. shell>mysqladmin -uroot -poldboy -S /data/3306/mysql.sock flush-logs
  3. mysqlsla分析:http://blog.itpub.net/7607759/viewspace-692828

2.7 二进制日志(binary log)介绍与调整

1、二进制日志(binary log)介绍
二进制日志(binary log)记录数据表被修改的相关信息;
2.二进制日志(binary log)调整
  1. root@oldboy 11:13:37->show variables like '%log_bin%';
  2. +---------------------------------+-------+
  3. | Variable_name                   | Value |
  4. +---------------------------------+-------+
  5. | log_bin      记录binlog开关      | ON    |
  6. | log_bin_trust_function_creators | OFF   |
  7. | sql_log_bin 临时不记录binlog开关(增量恢复)| ON 
  8. +---------------------------------+-------+
  9. 3 rows in set (0.01 sec)
可以在配置文件中设置
  1. [root@db02 3306]# grep log-bin /data/3306/my.cnf
  2. log-bin = /data/3306/mysql-bin

二进制日志log-bin作用;

1、以二进制形式记录更改数据库的SQL语句。
2、用于主从复制。
3、增量数据备份及恢复
临时不记录binlog(增量恢复)
mysql>set session sql_log_bin = OFF
mysql>show variables like ‘%log_bin%’;

2.8 增量备份

增量数据是从上次全量备份之后,更新的新数据。对于MySQL来说,binlog日志就是MySQL的增量数据

(1)按天全备情况

优点:恢复时间:短,维护成本:低
缺点:占用空间:多,占用系统资源多,经常锁表影响用户体验。

(2)按周全备情况

优点:占用空间小,占用系统资源少,无需锁表,用户体验好一些
缺点:维护成本高,恢复麻烦,时间长。

企业场景全量和增量的频率是怎么做的呢?

1)中小公司,全量一般是每天一次,业务流量低谷执行全备,备份时会锁表。
  增量备:
a.定时推binlog增量。例如每分钟推一次增量
例:rsync -avz /data/3306/mysql-bin.0000* rsync_bakcup@10.0.0.1::backup –password-file=/etc/rsync.password
b.再在其他远程实时读binlog。
-R, –read-from-remote-server 
                      Read binary logs from a MySQL server.
c. inotify 实时推送binlog
d.mysql主从复制(实时复制功能)
2)大公司周备,每周六00点一次全量,周日-下周六00点前都是增量。
优点:节点备份时间,减少备份压力。
单台数据库用rsync(配合定时任务频率大或者inotify,主从复制)把所有binlog备份到远程服务器,尽量做主从复制
缺点:增量的binlog文件副本太多,还原会很麻烦
3)一主多从环境,主从复制本身就是实时远程备份,可以解决服务器物理故障。
4)一主多从环境,可采取一个从库服务器上专门用mysqldump,cp、tar、xtrabackup做备份,延迟同步

MySQL备份常见方法

MySQL备份的常用方式有逻辑备份和物理备份(oracle也是如此)
逻辑备份:以SQL语句的形式对数据库进行备份(mysqldump)
物理备份:直接备份磁盘上的数据信息(cp、tar、xtrabackup)
50G一下的数据选择mysqldump,如果告诉50G 可以使用物理备份,因为那样逻辑备份会比较慢。
物理备份好于逻辑备份
cp tar 停机(至少禁止写入),xtrabackup支持热备

MySQL的mysqldump备份什么时候排上用场?

1.迁移或者升级数据库时。
2.增加从库的时候。
3.因为硬件或特殊异常情况,主库或从库宕机,主从可以互相切换,无需备份
4.认为的DDL,DML语句,主从库没办法了,所有库都会执行。此时需要备份
5.跨机房灾难,需要备份到异地

2.9 什么情况下需要增量恢复?

    我们在生产工作中一般常用一主多从的数据库架构,常见的备份方案是在某一个不对外服务的从库上开启binlog,然后实施定时全备和实时增量备份
什么是增量恢复?
利用二进制日志和全备进行恢复的过程,被称为增量备份
1)主或者从库宕机(硬件损坏)是否需要增量恢复?
答:不需要增量恢复,主库宕机,只需要把其中一个同步最快的从库切换为主库即可。
  主库宕机,只要选择更新最快的从库(master.info,或者5.5半同步机制)提升为主库
  从库宕机,直接不用就好了(一般都会陪LVS负载均衡)或者正常修复
结论:无论是主还是从,硬件损坏导致的故障无需恢复以及增量恢复。
2)人为操作数据库SQL语句破坏主库是否需要增量恢复?
  在数据库主库内部命令行误操作,会导致所有的数据库(包括主从库)数据丢失,例如:在主库执行了drop database test;这样的删除语句,这时所有的从库也会执行这个drop database test;语句,从而导致所有的数据库上的oldboy数据丢失。这样的场景是需要增量恢复的。
结论:认为操作数据库SQL语句破坏主库需要增量恢复
3)只有一个主库是否需要增量恢复?
   如果公司里只有一个主库的情况,首先应该做定时全量备份(一天每天一次)及增量备份(每个1-10分钟对binlog日志做切割然后备份到其他的服务器上,或者本地其他的硬盘里)或者写到网络文件系统(备份服务器)里。
  如果不允许数据丢失,最好的办法就是做从库,通过drbd(基于磁盘块的)同步
正常情况“
主从同步:除了分担读写分离压力外,还可以防止物理设备损坏数据丢失的恢复。
从库备份:在从库进行全量和增量方式的备份,可以防止认为对主库的误操作导致数据丢失。
  确保备份的从库实时和主库是同步状态
小结:一般由认为(或程序)逻辑的方式在数据库执行的SQL语句等误操作,才需要增量恢复,因为此时所有的从库夜之星了误操作语句,物理故障,直接切换从库即可,无需恢复

3.0 MySQL增量恢复必备条件

3.1 开启MySQL log-bin 日志功能

Mysql数据库开启了log-bin 参数记录binlog日志功能如下:
  1. shell>grep log-bin /data/3306/my.cnf
  2. log-bin = /data/3306/mysql-bin
提示:主库和备份的从库都要开启binlog记录功能
小结:增量恢复的条件:
  存在一份全备加上全备之后的时刻到出问题时刻的所有增量binlog文件备份

3.2 模拟每天00点备份数据,早上10.00领导删除数据,10.10发现问题并进行解决

1.修改时间为00:00,进行全备
  1. [root@db02 3306]#date -s "00:00:00"
  2. [root@db02 3306]# mysqldump -uroot -p123456 -S /data/3306/mysql.sock -B -F -R -x --master-data=2 oldboy|gzip >/opt/rh/oldboy-$(date +%F).sql.gz
2.备份完成修改成10点的时间
  1. [root@db02 3306]#date -s "10:00:00"
  2. mysql>drop database test;
3.发现问题,并解决
备份后产生了mysql-bin-log,如果不知道可以采用别的方法进行查看
使用gzip查看备份的时候写入那个binlog里面
  1. [root@db02 rh]# gzip -d oldboy-2015-12-22.sql.gz
  2. [root@db02 rh]# grep CHANGE oldboy-2015-12-22.sql
  3. -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000007', MASTER_LOG_POS=107;
4.导出数据进行备份,并进行分析
  1. [root@db02 rh]# cp /data/3306/mysql-bin.000007 .
  2. [root@db02 rh]# ls -l
  3. total 8
  4. -rw-r----- 1 root root  792 Dec 22 10:10 mysql-bin.000007
  5. -rw-r--r-- 1 root root 3010 Dec 22 00:00 oldboy-2015-12-22.sql
5.以及复制全量备份
  1. [root@db02 rh]# mysqlbinlog -d oldboy oldboy-2015-12-22.sql
6.如果恢复的sql文件比较多可以使用模糊匹配
[root@db02 rh]# mysqlbinlog
-d oldboy oldboy-2015-12-22.sql*或者后面接上bin。 
log的文件名(也可以使用for循环)顺序一定要正确    
  1. [root@db02 rh]# mysqlbinlog -d oldboy mysql-bin.000007 >007.sql
  2. [root@db02 rh]#vim 007.sql
  3. 因为是使用drop删除,日志里面记录了,所以我们使用vim将里面的drop删除
出了问题先把mysql-bin.log拿走,否则直接恢复数据库会再次记录
  1. [root@db02 rh]# mysql -uroot -p123456 -S /data/3306/mysql.sock  <oldboy-2015-12-22.sql
  2. [root@db02 rh]# mysql -uroot -p123456 -S /data/3306/mysql.sock -e "show databases;"
  3. +--------------------+
  4. | Database           |
  5. +--------------------+
  6. | information_schema |
  7. | cyh                |
  8. | mysql              |
  9. | oldboy             |
  10. | oldboy123          |
  11. | oldboy_gbk         |
  12. | performance_schema |
  13. | wordpress          |
  14. +--------------------+

表示已经恢复到我们00点之前的数据

  1. [root@db02 rh]# mysql -uroot -p123456 -S /data/3306/mysql.sock -e "select * from oldboy.test;"
  2. +----+--------+
  3. | id | name   |
  4. +----+--------+
  5. |  1 | gongli |
  6. |  2 | gongli |
  7. |  3 | gongli |
  8. |  4 | gongli |
  9. |  5 | gongli |
  10. +----+--------+
  11. 恢复增量数据
恢复增量数据,最好指定数据库名

[root@db02 rh]# mysql -uroot -p123456 -S
/data/3306/mysql.sock  007.sql

企业案例:

625某电商网站数据库宕机故障解决实录(上)   

http://oldboy.blog.51cto.com/2561410/1431161

http://oldboy.blog.51cto.com/2561410/1431172

MySQL 日志及数据备份 阅读详情

相关推荐

MySQL的日志管理与备份、恢复

MySQL的日志管理以及数据备份

m0_71518373的博客 897

MySQL的日志与备份

文章目录一.日志1.日志类型1.redo重做日志:达到事务一致性(每次重启会重做)2.undo回滚日志3.errorlog错误日志4.通用查询日志5. slow query log慢查询日志6.bin log二进制日志7.relay log 中继日志8.general log 普通日志2.查看日志状态1.查看通用查询日志是否开启2.查看二进制日志是否开启3.查看慢查询日志功能是否开启4.查询慢查询时间设置5.设置慢查询的方法(临时)二.MySQL备份与恢复1.数据备份的重要性2.造成数据丢失的原因3.物理和

a568911的博客 2348

Stata森林图进阶:个性化定制与高级技巧

本文详细介绍了Stata森林图的进阶技巧,包括个性化定制与高级应用。通过meta分析工具如metan命令,用户可以优化字体、颜色、坐标轴等视觉元素,提升森林图的专业性和可读性。文章还提供了黑白印刷设置、高分辨率导出等实用技巧,帮助科研人员制作符合学术出版要求的森林图。

ios99的博客 254

MySQL日志与备份篇

第17章_其他数据库日志

t624027645的博客 1957

电子病历编辑器源码(Springboot+原生HTML)

应用场景包括:电子病历书写、体温单录入、全平台信息采集、检验检查报告、不良事件上报等。 此外,电子病历编辑器软件还适用于医生工作站的病历编辑、护士工作站的护理记录输入、PASC/LIS/RIS报告编辑打印、病案首页、出院小结、病程记录、手术记录、各种知情书、康复及精神学科用的量表、临床路径用表单界面等等。 这些应用场景都涉及到了医疗文书编辑的需求,因此电子病历编辑器软件在这些场景中具有广泛的应用价值。

xingchen优快云的博客 3894

揭秘Coze图生图隐藏玩法:用Excel批量生成100+电商主图(扣子插件进阶教程)

本文深入解析了如何利用Coze(扣子)的图像生成插件实现电商主图的批量自动化生产。通过将Excel数据源、参数化提示词模板与参考图风格相结合,构建了一套高效的企业级解决方案,能够快速为海量SKU生成风格统一的高质量图片,大幅提升电商运营效率。

theta的博客 433

Mysql数据库:日志管理、备份与恢复

本文主要介绍了mysql的日志管理、备份和恢复,详细阐释了mysql数据库的完全备份中的物理冷备份和逻辑热备份方法,以及增量备份中的一般备份、基于位置备份、基于时间备份等方法,希望对你有帮助!

十七拾的博客 2890

科研绘图系列:R语言折线图(linechart plots)

科研绘图系列:R语言折线图(linechart plots)

专注生信领域 1269

MySQL日志、备份与恢复

mysqldump -uXXX -pXXX [-d] 库名 表1 [表2 ....] > XXX.sql 备份指定库中的一个或多个表数据,不包含库对象。mysqlbinlog --no-defaults --start-position='开始位置点' --stop-position='结束位置点' | mysql -uXXX -pXXX。MySQL完全备份是对整个数据库、数据库结构和文件结构的备份,保存的是备份完成时刻的数据库,是差异备份与增量备份的基础。

lcy913的博客 1092

ComfyUI 本地部署指南:概念、部署过程、生成图片、共享 WebUI 模型

ComfyUI 是一个基于节点的 Stable Diffusion 图形化用户界面。您可以通过将不同的节点连接在一起来构建生成图像的工作流程。一些常用的节点包括加载检查点模型(Load Checkpoint)、输入提示词(CLIP Text Encode)、指定采样器(KSampler)等。ComfyUI 将工作流程分解为可重新排列的元素,以便您可以轻松创建自己的元素。

水滴的博客 5032

外骨骼机器人(五):步态分析之正常步态

研究病理步态之前,需要了解正常步态,作为判断标准。但是需要记住两个问题:1.“正常”因人而异,性别、年龄、身体情况都需要考虑在内,因此,需要对不同的个体选择合适的正常标准;2.即使病人的步态与正常步态有某种不同,这也不能说明这是不可取的,也不能说明应该把它变成“正常”步态。许多步态异常是对病人的一些问题的一种补偿,尽管异常,但它们仍然是有用的。步态周期的定义是连续为两次发生重复行走事件之间的时间间隔。尽管可以选择任何事件来定义步态周期,但通常使用一只脚接触地面的瞬间(“初始接触”)是方便的。

行者无疆的博客 1990

MySQL日志管理、备份与恢复

如果恢复某条SQL语句以及之后的所有数据,就从这个语句的位置节点或者时间点start。如果恢复某条SQL语句之前的所有数据,就stop在这个语句的位置节点或者时间点。

Ybaocheng的博客 1431

风机叶片小规模振动监测数据集--读取测试

ETH风电叶片缺陷数据集–读取测试 数据简介 提示:这里可以添加本文要记录的大概内容: 结构健康监测是保障重要机电设备、建筑设施健康的重要技术手段。 一、lvm_read包安装 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务

cnjs1994的博客 2850

Mysql 日志备份与恢复

目录 一、MySQL的日志管理1、MySQL的日志分类2、MySQL的日志开启二、MySQL 完全备份与恢复1、数据备份的重要性2、数据库备份的分类2-1 从物理与逻辑的角度,备份可以分为2-2 从数据库的备份策略角度,备份可分为 3、常见的备份方法4、MySQL完全备份4-1 概念4-2 完全备份的优缺点4-3 数据库...

weixin_55609817的博客 584

可疑物品遗留检测系统:基于YOLOv8的智能安防解决方案

数据采集与标注模块:负责收集和标注可疑物品图像数据模型训练模块:基于YOLOv8算法训练检测模型推理检测模块:加载训练好的模型进行实时检测用户界面模块:提供友好的操作界面和可视化结果展示报警模块:当检测到可疑物品时触发报警机制:包含多种暴力场景和可疑物品SUAVe:监控场景下的异常行为与物品数据集:包含多种可疑物品自建数据集:针对特定场景收集的数据背包(backpack)手提箱(suitcase)无人看管的包裹(package)可疑箱子(box)

YOLO 435

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

MYSQL日志管理、备份与恢复

物理备份—》关闭mysqld服务----》tar命令打包data目录(恢复就是解压他的tar包即可)逻辑备份—》mysqldump -u(用户) -p(密码) --databases 库1 库2 > xxx.sqlmysqldump -u -p 库1 表1 表2 > xxx.sql完全恢复mysql -u -p < xxx.sql (恢复数据库)mysql -u -p 库名 < xxx.sql (恢复表)增量备份开启二进制日志,设置二进制格式MIXED(混合)

AH99999的博客 3386

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

MySQL的日志和备份及恢复

目录 备份 为什么要备份 备份类型 备份方式 MySQL的日志及作用 配置文件 实站操作 冷备份 mysqldump 备份与恢复 完全备份与恢复 增量备份及恢复 断点恢复 基于位置恢复 基于时间点 备份...

小柏ぁ的博客 2663

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

MySQL日志、备份恢复

目录一、MySQL日志管理1.日志分类错误日志通用查询日志二进制日志慢查询日志中继日志2.日志配置3.日志查询 3.1 查询通用日志是否开启 3.2 查询二进制日志是否开启 3.3 查看慢查询日志是否开启3.4 查询慢查询日志超时时间二、MySQL数据备份1.数据备份的重要性2.数据备份类型2.1物理备份和逻辑备份2.2完全备份、差异备份、增量备份3.备份方法三、实验:完全备份(物理冷备) 四、实验:mysqldump备份与恢复1.完全备份一个或多个完整的库(包含其中所有的表)2.完全备份 MySQL 服

FateZRK的博客 356

MySQL中的日志管理 日志备份与恢复

MySQL日志管理 MySQL的默认日志保存位置为/usr/local/mysql/data日志开启方式有两种:通过配置文件或者是通过命令 通过命令修改开启的日志是临时的,关闭或重启服务后就会关闭 1、错误日志 用来记录当MySQL启动、停止或运行时发生的错误信息,默认已开启 2、通用查询日志 用来记录MySQL的所有连接和语句,默认是关闭的 3、二进制日志(binlog) 用来记录所有当MySQL启动、停止或运行时发送的错误信息,默认是关闭的 4、慢查询日志 用来记录所有执行时间

Stevelu的技术博客 2683

MySQL 日志管理、备份与恢复

MySQL 日志管理、备份与恢复MySQL 日志管理、备份与恢复准备工作一、MySQL日志管理二、MySQL常用日志类型1、错误日志2、通用查询日志3、二进制日志(binlog)4、中继日志5、慢查询日志三、查看日志状态1、查看通用查询日志是否开启2、查看二进制日志是否开启3、查看慢查询日功能是否开启4、查看慢查询时间设置5、在数据库中设置开启慢查询的方法MySQL备份与恢复一、数据备份简介1、概述2、备份的重要性二、数据库备份的分类1、从物理与逻辑的角度分类(逻辑备份、物理备份)(1)物理备份:(2)逻辑

王大雏的博客 1056

mysql的日志备份和恢复

目录一、mysql常用日志1、MySQL的日志分类2、MySQL开启日志3、进入数据库里查看相对应的日志是否开启1、查看通用查询日志是否开启2、查看二进制日志是否开启3、查看慢查询日志相关功能①、查看慢查询日志功能是否开启②、查看慢查询时间设置二、mysql备份和恢复1、概述2、造成数据丢失的原因3、数据库备份的分类①、从物理与逻辑的角度分类1、物理备份2、逻辑备份②、从数据库的备份策略角度分类1、完全备份2、差异备份3、增量备份4、常见的备份方法①、物理冷备份②、专用备份工具 mysqldump 或 my

qq_45873113的博客 341

MySQL日志管理,备份与恢复

备份的主要目的是灾难恢复,备份还可以测试应用、回滚数据修改、查询历史数据、审计等。而备份、恢复中,日志起到了很重要的作用MySQL日志管理是数据库管理中的一个重要方面,它可以用于诊断问题、监控性能、进行故障恢复等。MySQL主要有几种类型的日志,包括错误日志、查询日志、二进制日志、慢查询日志等。下面详细解析每种类型的日志以及其管理。

qq_51545656的博客 1513
上一篇: MySQL主从复制原理、半同步操作步骤及原理
下一篇: MySQL入门介绍
linuxlsq
博客等级 码龄11年 69粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值