MySQL备份说明
第一次发布博客,发现目录居然不会生成,后续慢慢熟悉博客园的设置。回正文~~~
1 使用规范
1.1 实例级备份恢复
使用innobackupex,在业务空闲期执行,考虑到IO影响及 FLUSH TABLE WITH READ LOCAK 拷贝非INNODB文件的锁表时间。。
常规备份中,使用innobackupex在从库备份执行,在无从库的情况下,允许在业务低峰期对整个实例拷贝。
1.2 库、表级别备份恢复
考虑 数据量、磁盘IO情况、恢复难度问题。
mysqldump锁表时间长,备份时间长,但是导入方便,适合数据量小但是表格多 的库/表级别备份。
innobackupex锁表时间短,备份时间短,但是恢复较复杂,需要discord tablespace及 import TABLESPACE,除非允许备份文件成立单个实例,适合表数据量大但表格数量少的库/表级别备份。
1.3 SQL结果备份及恢复
如果是单表简单查询,使用mysqldump,添加where条件,例如:mysqldump -S /tmp/mysql3330.sock -uroot -p --databases db1 --tables tb1 tb2 tb3 -d >/data/backup/3330/mysqldump_20161229.sql 。
如果是复杂SQL查询结果,使用 INTO OUTFILE,如下:
- #FIELDS TERMINATED BY ',' 字段间分割符
- #OPTIONALLY ENCLOSED BY '"' 将字段包围 对数值型无效
- #LINES TERMINATED BY '\n' 换行符
- #查询导出
- select * into outfile '/tmp/pt.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' from pt where id >3;
- #加载数据
- load data infile '/tmp/pt1.txt' into table pt FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n'
1.4 表结构备份
使用mysqldump,添加-d参数。
2 mysqldump
支持功能多且全面,但是锁表时间是个风险点,使用时注意,同时,若是5.6版本之前的,要充分考虑buffer pool的使用情况。
2.1 原理
通过general log查看mysqldump运行原理,详细流程见代码块 mysqldump。
mysqldump运行中,第一步,会检查数据库的配置情况,例如是否设置GTID模式及参数配置;第二步,锁所有表格,只允许读操作;第三步,逐个拷贝表格,生成创建表格上SQL(字符集为binary),再SELECT * FROM 表格 生成数据脚步(字符集为UTF8);第4步,解锁。
当导出全实例或者大数据库时,这里有2个需要注意到问题:
- 锁表的时间
- 基本可以算是从开始到结束都是锁表期间,不能对数据库进行写操作,只能读
- 线上主库无法支持这么长时间的锁表操作
- 线上从库,应考虑对复制到影响
- buffer pool的影响
- 由于是采用SELECT * 生成SQL语句,大量读操作,会把缓存里的数据清理出来,导致热点数据移出,对线上DML操作带来严重影响
- 5.6后版本,新增了young buffer pool,一秒内以这个数据被再次访问,则会进入到buffer pool 的warm区。youny区占buffer pool的3/8,剩下的5/8为warm区,可以有效保证热点数据不被清出。
- 执行SQL:mysqldump -S /tmp/mysql3330.sock -uroot -p --databases zero >/data/backup/3330/mysqldump_20161229.sql
- 2016-12-27T14:38:27.782875Z 1732 Connect root@localhost on using Socket
- 2016-12-27T14:38:27.803572Z 1732 Query /*!40100 SET @@SQL_MODE='' */
- 2016-12-27T14:38:27.804096Z 1732 Query /*!40103 SET TIME_ZONE='+00:00' */
- 2016-12-27T14:38:27.804528Z 1732 Query SHOW VARIABLES LIKE 'gtid\_mode' #检查是否设置了GTID
- 2016-12-27T14:38:27.813387Z 1732 Query SELECT LOGFILE_GROUP_NAME, FILE_NAME, TOTAL_EXTENTS, INITIAL_SIZE, ENGINE, EXTRA FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'UNDO LOG' AND FILE_NAME IS NOT NULL AND LOGFILE_GROUP_NAME IS NOT NULL AND LOGFILE_GROUP_NAME IN (SELECT DISTINCT LOGFILE_GROUP_NAME FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE' AND TABLESPACE_NAME IN (SELECT DISTINCT TABLESPACE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA IN ('zero'))) GROUP BY LOGFILE_GROUP_NAME, FILE_NAME, ENGINE, TOTAL_EXTENTS, INITIAL_SIZE ORDER BY LOGFILE_GROUP_NAME
- 2016-12-27T14:38:27.816987Z 1732 Query SELECT DISTINCT TABLESPACE_NAME, FILE_NAME, LOGFILE_GROUP_NAME, EXTENT_SIZE, INITIAL_SIZE, ENGINE FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE' AND TABLESPACE_NAME IN (SELECT DISTINCT TABLESPACE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA IN('zero')) ORDER BY TABLESPACE_NAME, LOGFILE_GROUP_NAME
- 2016-12-27T14:38:27.819423Z 1732 Query SHOW VARIABLES LIKE 'ndbinfo\_version'
- 2016-12-27T14:38:27.824802Z 1732 Init DB zero
- 2016-12-27T14:38:27.825015Z 1732 Query SHOW CREATE DATABASE IF NOT EXISTS `zero` #生成创建数据库的的脚步
- 2016-12-27T14:38:27.825381Z 1732 Query show tables #检查该数据库里边有多少表格,根据这些表格来开始lock table
- 2016-12-27T14:38:27.825969Z
- 1732 Query LOCK TABLES `dsns` READ /*!32311 LOCAL */,`pt` READ
- /*!32311 LOCAL */,`sbtest20` READ /*!32311 LOCAL */
- #锁表,仅允许读操作
- ########################################每个表格重复部分############################################################
- 2016-12-27T14:38:27.826324Z 1732 Query show table status like 'dsns'
- 2016-12-27T14:38:27.832651Z 1732 Query SET SQL_QUOTE_SHOW_CREATE=1
- 2016-12-27T14:38:27.832930Z 1732 Query SET SESSION character_set_results = 'binary'
- 2016-12-27T14:38:27.833169Z 1732 Query show create table `dsns`
- #字符集修改为 binary,生成架构SQL
- 2016-12-27T14:38:27.833448Z 1732 Query SET SESSION character_set_results = 'utf8'
- 2016-12-27T14:38:27.833793Z 1732 Query show fields from `dsns`
- 2016-12-27T14:38:27.834697Z 1732 Query show fields from `dsns`
- 2016-12-27T14:38:27.835598Z 1732 Query SELECT /*!40001 SQL_NO_CACHE */ * FROM `dsns`
- #字符集修改为 utf8,导出数据SQL
- 2016-12-27T14:38:27.836129Z 1732 Query SET SESSION character_set_results = 'binary'
- 2016-12-27T14:38:27.836401Z 1732 Query use `zero`
- 2016-12-27T14:38:27.836644Z 1732 Query select @@collation_database
- 2016-12-27T14:38:27.836949Z 1732 Query SHOW TRIGGERS LIKE 'dsns'
- 2016-12-27T14:38:27.837738Z 1732 Query SET SESSION character_set_results = 'utf8'
- ########################################每个表格重复部分############################################################
- #每个表格的导出都重复上述部分
- 2016-12-27T14:38:28.525530Z 1732 Query SET SESSION character_set_results = 'utf8'
- 2016-12-27T14:38:28.525832Z 1732 Query UNLOCK TABLES
- #解锁,允许读写
2.2 重要参数
以下参数在使用过程中,需要留意,根据实际情况添加:
- --master-data=1 /2
- --singe-transaction
- --set-gtid-purged=ON / OFF
- -d
只导出表结构
- --databases
主要参数相见代码模 mysqldump主要参数,并非所有参数内容,这些参数较常使用。
- [root@localhost zero]# mysqldump --help
- Dumping structure and contents of MySQL databases and tables.
- Usage: mysqldump [OPTIONS] database [tables]
- OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
- OR mysqldump [OPTIONS] --all-databases [OPTIONS]
- --no-defaults Don't read default options from any option file,
- except for login file.
- --defaults-file=# Only read default options from the given file #.
- -A, --all-databases Dump all the databases. This will be same as --databases
- with all databases selected.
- -Y, --all-tablespaces
- Dump all the tablespaces.
- -y, --no-tablespaces
- Do not dump any tablespace information.
- --add-drop-database Add a DROP DATABASE before each create.
- --add-drop-table Add a DROP TABLE before each create.
- (Defaults to on; use --skip-add-drop-table to disable.)
- --add-drop-trigger Add a DROP TRIGGER before each create.
- --add-locks Add locks around INSERT statements.
- (Defaults to on; use --skip-add-locks to disable.)
- --apply-slave-statements
- Adds 'STOP SLAVE' prior to 'CHANGE MASTER' and 'START
- SLAVE' to bottom of dump.
- -B, --databases Dump several databases. Note the difference in usage; in
- this case no tables are given. All name arguments are
- regarded as database names. 'USE db_name;' will be
- included in the output.
- --master-data[=#] This causes the binary log position and filename to be
- appended to the output. If equal to 1, will print it as a
- CHANGE MASTER command; if equal to 2, that command will
- be prefixed with a comment symbol. This option will turn
- --lock-all-tables on, unless --single-transaction is
- specified too (in which case a global read lock is only
- taken a short time at the beginning of the dump; don't
- forget to read about --single-transaction below). In all
- cases, any action on logs will happen at the exact moment
- of the dump. Option automatically turns --lock-tables
- off.
- -n, --no-create-db Suppress the CREATE DATABASE ... IF EXISTS statement that
- normally is output for each dumped database if
- --all-databases or --databases is given.
- -t, --no-create-info
- Don't write table creation info.
- -d, --no-data No row information.
- -p, --password[=name]
- Password to use when connecting to server. If password is
- not given it's solicited on the tty.
- -P, --port=# Port number to use for connection.
- --replace Use REPLACE INTO instead of INSERT INTO.
- --set-gtid-purged[=name]
- Add 'SET @@GLOBAL.GTID_PURGED' to the output. Possible
- values for this option are ON, OFF and AUTO. If ON is
- used and GTIDs are not enabled on the server, an error is
- generated. If OFF is used, this option does nothing. If
- AUTO is used and GTIDs are enabled on the server, 'SET
- @@GLOBAL.GTID_PURGED' is added to the output. If GTIDs
- are disabled, AUTO does nothing. If no value is supplied
- then the default (AUTO) value will be considered.
- --single-transaction
- Creates a consistent snapshot by dumping all tables in a
- single transaction. Works ONLY for tables stored in
- storage engines which support multiversioning (currently
- only InnoDB does); the dump is NOT guaranteed to be
- consistent for other storage engines. While a
- --single-transaction dump is in process, to ensure a
- valid dump file (correct table contents and binary log
- position), no other connection should use the following
- statements: ALTER TABLE, DROP TABLE, RENAME TABLE,
- TRUNCATE TABLE, as consistent snapshot is not isolated
- from them. Option automatically turns off --lock-tables.
- --tables Overrides option --databases (-B).
- --triggers Dump triggers for each dumped table.
- (Defaults to on; use --skip-triggers to disable.)
- -u, --user=name User for login if not current user.
mysqldump主要参数
2.3 使用说明
语法主要有以下三类:
- Usage: mysqldump [OPTIONS] database [tables]
- OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
- OR mysqldump [OPTIONS] --all-databases [OPTIONS]
2.3.1 实例备份恢复
- #实例备份
- mysqldump -S /tmp/mysql3330.sock -uroot -p --all-datqabases >/data/backup/3330/mysqldump_20161229.sql
- #实例恢复
- #新建实例后,导入脚本
- mysql --socket=/tmp/mysql3306.sock -uroot -p < /data/backup/3330/mysqldump_20161229.sql
2.3.2 部分备份恢复
- #指定单个或者多个DB备份
- mysqldump -S /tmp/mysql3330.sock -uroot -p db1 db2 db3 >/data/backup/3330/mysqldump_20161229.sql
- mysqldump -S /tmp/mysql3330.sock -uroot -p --databases db1 db2 db3 >/data/backup/3330/mysqldump_20161229.sql
- #指定单个或者多个表格备份
- mysqldump -S /tmp/mysql3330.sock -uroot -p --databases db1 --tables tb1 tb2 tb3 >/data/backup/3330/mysqldump_20161229.sql
- mysqldump -S /tmp/mysql3330.sock -uroot -p db1 tb1 tb2 tb3 >/data/backup/3330/mysqldump_20161229.sql
- #只导出单个表格的某些行数据
- mysqldump -S /tmp/mysql3330.sock -uroot -pycf.com zero pt --where='1=1 limit 2' >/data/backup/3330/mysqldump_20161229.sql
- #只备份表结构,不要表数据
- mysqldump -S /tmp/mysql3330.sock -uroot -p --databases db1 --tables tb1 tb2 tb3 -d >/data/backup/3330/mysqldump_20161229.sql
- #只备份表数据,不要表结构
- mysqldump -S /tmp/mysql3330.sock -uroot -pycf.com zero pt --where='id>3' --no-create-info >/data/backup/3330/mysqldump_20161229.sql
- #恢复数据
- source /data/backup/3330/mysqldump_20161229.sql
3 PerconaXtraBackup
PerconaXtraBackup软件中,含有xtrabackup跟innobackupex,xtrabackup中不备份表结构,innobackupex调用xtrabackup子线程后再备份表结构,故常用innobackupex,xtraback不做日常使用。目前支持 Myisam,innodb,可以备份 .frm, .MRG, .MYD, .MYI, .MAD, .MAI, .TRG, .TRN, .ARM, .ARZ, .CSM, CSV, .opt, .par, innoDB data 及innobdb log 文件。
3.1 innobackupex原理(全量说明)
对数据库文件进行copy操作,同时建立多一个xtrabackup log 同步mysql的redo线程,copy数据文件结束时,flush table with read lock,拷贝非innodb数据文件的文件,拷贝结束后解锁。原理图见下图(图片来自知数堂)。通过general log查看mysqldump运行原理,详细流程见代码块 innobackupex。
这里需要注意2个点:
- 锁表时间
innobackupex锁表时间是 data文件及log文件copy结束时,才锁表,锁表时长为拷贝non-InnoDB tables and files的时长,相对时间较短,对业务影响小。
- 大事务
copy数据文件的过程中,由于是不锁表,允许数据进行DML操作,这里需要注意,如果这个时候,拷贝的过程中有大事务一直没有提交,界面显示log scanned up,持续copy binlog追上数据库的binlog文件,并且该时间点刚好所有事务已提交(这里测试的时候,如果是单条 insert ,delete,update的大事务,则是要等待单条完成才提交,但是如果是begin事务里边的,不用等待是否commit or rollback,begin里边的单条事务执行结束,则就开始提交,恢复的时候,当作是undo 事务,不会提交该事物,回滚该事务)。大事务容易导致备份时长加长,IO占用。
- 2016-12-26T15:18:39.627366Z 1659 Connect root@localhost on using Socket
- 2016-12-26T15:18:39.627789Z 1659 Query SET SESSION wait_timeout=2147483
- 2016-12-26T15:18:39.628193Z 1659 Query SHOW VARIABLES
- #记录LSN号码,开始copy ibd文件
- 2016-12-26T15:18:55.673740Z 1659 Query SET SESSION lock_wait_timeout=31536000
- 2016-12-26T15:18:55.674281Z 1659 Query FLUSH NO_WRITE_TO_BINLOG TABLES
- #强制把没有 还没写入binlog 磁盘文件的缓存 强制刷新到磁盘
- #开始拷贝数据库文件,这里需要注意,如果这个时候,拷贝的过程中有大事务一直没有提交,则会一直拷贝其产生的 ,界面显示log scanned up,直到copy binlog追上数据库的binlog文件,并且该时间点刚好所有事务已提交(这里测试的时候,如果是单条 insert ,delete,update的大事务,则是要等待单条完成才提交,但是如果是begin事务里边的,不用等待是否commit or rollback,begin里边的单条事务执行结束,则就开始提交,恢复的时候,当作是undo 事务,不会提交该事物,回滚该事务。 )
- 2016-12-26T15:18:55.676345Z 1659 Query FLUSH TABLES WITH READ LOCK
- #锁表,只允许读,不允许写及其他架构修改操作
- #拷贝除innodb 数据文件外的其他所有文件,包括表结构等,Starting to backup non-InnoDB tables and files
- 2016-12-26T15:18:59.691409Z 1659 Query SHOW MASTER STATUS
- #记录 备份到的 binlog文件及position位置,这个记录在 xtrabackup_binlog_info 文件,可提供复制使用
- 2016-12-26T15:18:59.734418Z 1659 Query SHOW VARIABLES
- 2016-12-26T15:18:59.754530Z 1659 Query FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS
- 2016-12-26T15:18:59.968452Z 1659 Query UNLOCK TABLES
- #解锁,表格恢复可写,架构可修改
- 2016-12-26T15:18:59.991046Z 1659 Query SELECT UUID()
- 2016-12-26T15:19:00.005980Z 1659 Query SELECT VERSION()
3.2 重要参数
3.2.1 备份参数
3.2.2 准备还原参数
根据 BACKUP-DIR/xtrabackup_logfile创建新的logfile,xtrabackup为子进程,不连接数据库服务.
3.2.3 备份目录拷贝参数
- 拷贝备份目录到指定目录,备份目录及拷贝目录文件均存在
- 移动备份目录到指定目录,备份目录为空
3.3 使用说明
3.3.1 实例备份及恢复
3.3.1.1 全量备份
- #全量备份 实例备份及恢复
- #备份
- innobackupex --defaults-file=/data/mysql/mysql3330.cnf --user=root --password=ycf.com --no-timestamp /data/backup/3330/20161229
- innobackupex --apply-log /data/backup/3330/20161229
- #恢复
- innobackupex --copy-back --datadir=/data/mysql/mysql3350/data /data/backup/3330/20161229
3.3.1.2 增量备份恢复
- #增量备份
- innobackupex --defaults-file=/data/mysql/mysql3376.cnf --user=root --password=ycf.com --no-timestamp --incremental-basedir=/data/backup/3330/20161229 --incremental /data/backup/mysql3376/20161230diff
- innobackupex --defaults-file=/data/mysql/mysql3376.cnf --user=root --password=ycf.com --no-timestamp --incremental-basedir=/data/backup/3330/20161230diff --incremental /data/backup/mysql3376/20161231diff
- #增量恢复
- #现在完整备份文件中中应用redo日志,记得是redo-only, redo-only, redo-only, redo-only, 不是readonly,打死记得,不要乱来!!!!!!
- innobackupex --apply-log --redo-only /data/backup/3330/20161229
- #应用第一个增量备份文件的redo日志到完整备份文件夹中
- innobackupex --apply-log --redo-only /data/backup/3330/20161229 --incremental-dir=/data/backup/mysql3376/20161230diff
- #应用最后一个增量备份文件的redo日志到完整备份文件夹中,可以直接apply-log
- innobackupex --apply-log /data/backup/3330/20161229 --incremental-dir=/data/backup/mysql3376/20161231diff
3.3.2 部分备份
- #部分备份
- #指定数据库备份
- innobackupex --defaults-file=/data/mysql/mysql3330.cnf --databases='zero mysql' --user=root --password=ycf.com --no-timestamp /data/backup/3330/20161202
- #指定表格备份
- #3.1 --include 使用正则表达式
- #3.2 --table-file 备份的完整表名写在file文件中
- vim /tmp/backupfile #每行写一个库名,或者一个表的全名(database.table),写完库名或者表名后,千万不要有空格或者其他空白符号,会导致识别不了该表格或者库名,从而导致跳过
- innobackupex --defaults-file=/data/mysql/mysql3330.cnf --tables-file=/tmp/backupfile --user=root --password=ycf.com --no-timestamp /data/backup/3330/20161204
- #3.3 --databases 完整库名和表名写在一起,用空格隔开
- innobackupex --defaults-file=/data/mysql/mysql3330.cnf --user=root --password=ycf.com --no-timestamp --databases=zero.s1 /data/backup/3330/20161229
- #指定表格恢复(开启独立表空间)
- #首先要自己现在需要恢复的数据库上,创建该表格,然后discard tablespace,拷贝ibd文件过来,chown 文件所有者及用户组为mysql,再 import tablespace。
- #如果有大量表格,用这个操作就比较麻烦,需要一个个来创建,包括指定数据库,也是这样处理,整个数据库先创建之后,在一个个表格discard,再import。
- ALTER TABLE S1 DISCARD TABLESPACE;
- ALTER TABLE S1 import TABLESPACE;
MySQL备份说明的更多相关文章
- MySQL备份还原——AutoMySQLBackup介绍
AutoMySQLBackup是一个开源的MySQL备份脚本.可以说它是一个轻量级的备份方案,AutoMySQLBackup的安装.配置非常简单.方便.AutoMySQLBackup的sourcefo ...
- mysql备份脚本,每天执行一次全量备份,三次增量备份
线上一个小业务的mysql备份 全量备份 #!/bin/bash #crete by hexm at -- #scripte name : full_backup.sh #descriptioni : ...
- mysql备份还原
备份java代码如下: /** * 备份单个数据库 * @param dbName 数据库名称 * @return 备份成功或者失败 */ @Override public boolean backu ...
- Mysql备份系列(4)--lvm-snapshot备份mysql数据(全量+增量)操作记录
Mysql最常用的三种备份工具分别是mysqldump.Xtrabackup(innobackupex工具).lvm-snapshot快照.前面分别介绍了:Mysql备份系列(1)--备份方案总结性梳 ...
- Mysql备份系列(1)--备份方案总结性梳理
mysql数据库备份有多么重要已不需过多赘述了,废话不多说!以下总结了mysql数据库的几种备份方案: 一.binlog二进制日志通常作为备份的重要资源,所以再说备份方案之前先总结一下binlog日志 ...
- MySQL备份方式简介
MySQL备份的方式主要分为两种: 文本格式备份: 命令:mysqldump 转储文件:dump file 主要内容:数据库结构及数据(create talbe /insert) 二进制备份:这类备份 ...
- Mysql备份迁移——MySqlBackup(.net)——(无法解决视图嵌视图报错)
这里是利用MySqlBackup,可以再nuget中下载. 无法解决视图嵌视图报错的问题,只导表跟数据比较合适,如果有视图嵌视图,请参照Mysql备份迁移——Mysqldump(.NET调用Mysql ...
- MySQL 备份与还原详解
相关阅读: MySQL备份和恢复具体实施 http://www.linuxidc.com/Linux/2012-12/76257.htm MySQL备份与恢复的三种方法总结 http://www.li ...
- 05-雷海林-mysql备份原理与在TDSQL中的实践
05-雷海林-mysql备份原理与在TDSQL中的实践 下载地址: http://files.cnblogs.com/files/MYSQLZOUQI/05-%E9%9B%B7%E6%B5%B7%E6 ...
- centos shell编程6一些工作中实践脚本 nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志 直接送给bc做计算 gzip innobackupex/Xtrabackup 第四十节课
centos shell编程6一些工作中实践脚本 nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志 直接送给bc做计算 gzip innobacku ...
随机推荐
- IOS Cell 重影
效果:重影 原因: 多次创建控件元素 解决:在initWithStyle中进行初始化元素
- Linux 线程调度与优先级设置
转载:http://blog.csdn.net/a_ran/article/details/43759729 线程调度间的上下文切换 什么是上下文切换? 如果主线程是唯一的线程,那么他基本上不会被调度 ...
- session锁问题
碰到个问题,在使用了session时(如用户登录),如果当前请求时间过长,再执行其他请求都不会有响应,查找了网上资料发现,这个是session锁的问题 目前我们的程序基本流程如下: (1)加载Sess ...
- DevExpress控件学习总结(转)
DevExpress控件学习总结 1.Navigation & Layout 1.1 Bar Manager 如果想在窗体或用户控件(user control)上添加工具条(bars)或弹 ...
- 关于firefox启动就崩溃的问题
前些天在公司内网机器安装了Firefox Developer,每次启动直接就崩溃.最后发现问题出在Firefox的硬件加速上.解决办法: 1.右击firefox快捷方式,选择属性,在“目标”后面,即f ...
- BNU Online Judge-34776-What does the fox say?
题目链接 http://www.bnuoj.com/bnuoj/problem_show.php?pid=34776 题意: fox 的叫声 例如测试用例 输入 toot woof wa ow ow ...
- Java Swing Graphics Graphics2D的一般用法
Java Swing Graphics Graphics2D的一般用法: 贝塞尔曲线参考:http://www.zhangxinxu.com/wordpress/2014/06/deep-unders ...
- MyEclipse 2014去除derby
在MyEclipse安装目录下打开configuration\org.eclipse.equinox.simpleconfigurator\bundles.info 搜索derby找到com.genu ...
- 搭建Minisipserve服务器实现局域网内IOS客户端idoubs的通信
idoubs是IOS设备开发的第一款全功能并开放源码的3GPP IMS客户端,它同时专为IOS平台开发设计的voIP测试版客户端,以doubango为框架,能实现当前最先进的多媒体功能,主要功能有:语 ...
- HTTP服务器的本质:tinyhttpd源码分析及拓展
已经有一个月没有更新博客了,一方面是因为平时太忙了,另一方面是想积攒一些干货进行分享.最近主要是做了一些开源项目的源码分析工作,有c项目也有python项目,想提升一下内功,今天分享一下tinyhtt ...