Preface
 
    In my previous two blogs,we have known about the tool of backing up MySQL db.I'm gonna use another tool named "MySQL Data Dumper" to do some test,here we go.
 
Introduce
 
    There's a third-party tool called mydumper which is similar with MySQL official backup tool mysqldump and identically backs up logically.The latest version of  mydumper is 0.9.3,Here's the website link:https://launchpad.net/mydumper/+milestone/0.9.3
 
 ###Download & Install mydumper.###
[root@zlm1 :: ~]
#wget https://launchpad.net/mydumper/0.9/0.9.1/+download/mydumper-0.9.1.tar.gz
---- ::-- https://launchpad.net/mydumper/0.9/0.9.1/+download/mydumper-0.9.1.tar.gz
Resolving launchpad.net (launchpad.net)... 91.189.89.223, 91.189.89.222
Connecting to launchpad.net (launchpad.net)|91.189.89.223|:... connected.
HTTP request sent, awaiting response... See Other
Location: https://launchpadlibrarian.net/225370879/mydumper-0.9.1.tar.gz [following]
---- ::-- https://launchpadlibrarian.net/225370879/mydumper-0.9.1.tar.gz
Resolving launchpadlibrarian.net (launchpadlibrarian.net)... 91.189.89.229, 91.189.89.228
Connecting to launchpadlibrarian.net (launchpadlibrarian.net)|91.189.89.229|:... connected.
HTTP request sent, awaiting response... OK
Length: (43K) [application/x-tar]
Saving to: ‘mydumper-0.9..tar.gz’ %[===========================================================================================================>] , .6KB/s in .6s -- :: (67.6 KB/s) - ‘mydumper-0.9..tar.gz’ saved [/] [root@zlm1 :: ~]
#ls -l
total
-rw-------. root root Jul anaconda-ks.cfg
-rw-r--r-- root root Nov mydumper-0.9..tar.gz
drwxrwxrwx root root Jun : mysqlbinlog_flashback-master
-rwxr-xr-x root root Jun : mysqld.sh
-rwxr-xr-x root root Jun : mysql.sh
-rw-r--r-- root root Jul percona-xtrabackup--2.4.-.el7.x86_64.rpm
drwxrwxrwx root root Jun : pip-10.0.
-rwxr-xr-x root root Jun : pip-10.0..tar
drwxr-xr-x root root Jun : PyMySQL-0.8.
-rwxr-xr-x root root Jun : PyMySQL-0.8..tar
drwxrwxr-x root root Jun : Python-2.6.
-rwxr-xr-x root root Jun : Python-2.6..tar
-rw-r--r-- root root Jun : recover.sh
-rw-r--r-- root root May : rename_tb.sql
drwxrwxrwx root root Jun : setuptools-39.2. [root@zlm1 :: ~]
#gzip -d mydumper-0.9..tar.gz [root@zlm1 :: ~]
#tar -xf mydumper-0.9..tar [root@zlm1 :: ~]
#cd mydumper-0.9. [root@zlm1 :: ~/mydumper-0.9.]
#ls -l
total
-rw-r--r-- root root Nov binlog.c
-rw-r--r-- root root Nov binlog.h
drwxr-xr-x root root Jun : cmake
-rw-r--r-- root root Nov CMakeLists.txt
-rw-r--r-- root root Nov common.h
-rw-r--r-- root root Nov config.h.in
drwxr-xr-x root root Jun : docs
-rw-r--r-- root root Nov g_unix_signal.c
-rw-r--r-- root root Nov g_unix_signal.h
-rw-r--r-- root root Nov mydumper.c
-rw-r--r-- root root Nov mydumper.h
-rw-r--r-- root root Nov myloader.c
-rw-r--r-- root root Nov myloader.h
-rw-r--r-- root root Nov README
-rw-r--r-- root root Nov server_detect.c
-rw-r--r-- root root Nov server_detect.h [root@zlm1 :: ~/mydumper-0.9.]
#cmake .
-bash: cmake: command not found -- There's not cmake package in my system,install cmake first. [root@zlm1 :: ~/mydumper-0.9.]
#yum install cmake
-- Omitted. [root@zlm1 :: ~/mydumper-0.9.]
#cmake .
-- The C compiler identification is GNU 4.8.
-- The CXX compiler identification is GNU 4.8.
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Using mysql-config: /usr/local/mysql/bin/mysql_config
-- Found MySQL: /usr/local/mysql/include, /usr/local/mysql/lib/libmysqlclient.so;/usr/lib64/libpthread.so;/usr/lib64/libm.so;/usr/lib64/librt.so;/usr/lib64/libdl.so
-- Found ZLIB: /usr/lib64/libz.so (found version "1.2.7")
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.27.1")
-- checking for one of the modules 'glib-2.0'
CMake Error at /usr/share/cmake/Modules/FindPkgConfig.cmake: (message):
None of the required 'glib-2.0' found
Call Stack (most recent call first):
cmake/modules/FindGLIB2.cmake: (pkg_search_module)
CMakeLists.txt: (find_package) -- checking for one of the modules 'gthread-2.0'
CMake Error at /usr/share/cmake/Modules/FindPkgConfig.cmake: (message):
None of the required 'gthread-2.0' found
Call Stack (most recent call first):
cmake/modules/FindGLIB2.cmake: (pkg_search_module)
CMakeLists.txt: (find_package) -- checking for module 'libpcre'
-- found libpcre, version 8.32
-- Found PCRE: /usr/include CMake Warning at docs/CMakeLists.txt: (message):
Unable to find Sphinx documentation generator -- ------------------------------------------------
-- MYSQL_CONFIG = /usr/local/mysql/bin/mysql_config
-- CMAKE_INSTALL_PREFIX = /usr/local
-- BUILD_DOCS = ON
-- WITH_BINLOG = OFF
-- RUN_CPPCHECK = OFF
-- Change a values with: cmake -D<Variable>=<Value>
-- ------------------------------------------------
--
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
GLIB2_LIBRARIES (ADVANCED)
linked by target "mydumper" in directory /root/mydumper-0.9.
linked by target "myloader" in directory /root/mydumper-0.9.
GTHREAD2_LIBRARIES (ADVANCED)
linked by target "mydumper" in directory /root/mydumper-0.9.
linked by target "myloader" in directory /root/mydumper-0.9. -- Configuring incomplete, errors occurred!
See also "/root/mydumper-0.9.1/CMakeFiles/CMakeOutput.log". [root@zlm1 :: ~/mydumper-0.9.]
#yum install glib2-devel -- Install glib2-devel package to solve the problem above.
--Omitted. [root@zlm1 :: ~/mydumper-0.9.]
#cmake .
-- Using mysql-config: /usr/local/mysql/bin/mysql_config
-- Found MySQL: /usr/local/mysql/include, /usr/local/mysql/lib/libmysqlclient.so;/usr/lib64/libpthread.so;/usr/lib64/libm.so;/usr/lib64/librt.so;/usr/lib64/libdl.so
-- checking for one of the modules 'glib-2.0'
-- checking for one of the modules 'gthread-2.0' CMake Warning at docs/CMakeLists.txt: (message):
Unable to find Sphinx documentation generator -- ------------------------------------------------
-- MYSQL_CONFIG = /usr/local/mysql/bin/mysql_config
-- CMAKE_INSTALL_PREFIX = /usr/local
-- BUILD_DOCS = ON
-- WITH_BINLOG = OFF
-- RUN_CPPCHECK = OFF
-- Change a values with: cmake -D<Variable>=<Value>
-- ------------------------------------------------
--
-- Configuring done
-- Generating done
-- Build files have been written to: /root/mydumper-0.9. [root@zlm1 :: ~/mydumper-0.9.]
#make
Scanning dependencies of target mydumper
[ %] Building C object CMakeFiles/mydumper.dir/mydumper.c.o
[ %] Building C object CMakeFiles/mydumper.dir/server_detect.c.o
[ %] Building C object CMakeFiles/mydumper.dir/g_unix_signal.c.o
Linking C executable mydumper
[ %] Built target mydumper
Scanning dependencies of target myloader
[%] Building C object CMakeFiles/myloader.dir/myloader.c.o
Linking C executable myloader
[%] Built target myloader [root@zlm1 :: ~/mydumper-0.9.]
#ls -l | grep my
-rwxr-xr-x root root Jun : mydumper -- This can be used to backup db.
-rw-r--r-- root root Nov mydumper.c
-rw-r--r-- root root Nov mydumper.h
-rwxr-xr-x root root Jun : myloader -- This can be used to restore db.
-rw-r--r-- root root Nov myloader.c
-rw-r--r-- root root Nov myloader.hss [root@zlm1 :: ~/mydumper-0.9.]
#mydumper --help
-bash: mydumper: command not found ###Copy
[root@zlm1 :: ~/mydumper-0.9.]
#cp mydumper /usr/bin [root@zlm1 :: ~/mydumper-0.9.]
#cp myloader /usr/bin [root@zlm1 :: ~/mydumper-0.9.]
#mydumper --help -- There's not option to dump binlogs in new version,you cannot find parameter "-b" anymore.
Usage:
mydumper [OPTION?] multi-threaded MySQL dumping Help Options:
-?, --help Show help options Application Options:
-B, --database Database to dump
-T, --tables-list Comma delimited table list to dump (does not exclude regex option)
-o, --outputdir Directory to output files to
-s, --statement-size Attempted size of INSERT statement in bytes, default
-r, --rows Try to split tables into chunks of this many rows. This option turns off --chunk-filesize
-F, --chunk-filesize Split tables into chunks of this output file size. This value is in MB
-c, --compress Compress output files
-e, --build-empty-files Build dump files even if no data available from table
-x, --regex Regular expression for 'db.table' matching
-i, --ignore-engines Comma delimited list of storage engines to ignore
-m, --no-schemas Do not dump table schemas with the data
-d, --no-data Do not dump table data
-G, --triggers Dump triggers
-E, --events Dump events
-R, --routines Dump stored procedures and functions
-k, --no-locks Do not execute the temporary shared read lock. WARNING: This will cause inconsistent backups
--less-locking Minimize locking time on InnoDB tables.
-l, --long-query-guard Set long query timer in seconds, default
-K, --kill-long-queries Kill long running queries (instead of aborting)
-D, --daemon Enable daemon mode
-I, --snapshot-interval Interval between each dump snapshot (in minutes), requires --daemon, default
-L, --logfile Log file name to use, by default stdout is used
--tz-utc SET TIME_ZONE='+00:00' at top of dump to allow dumping of TIMESTAMP data when a server has data in different time zones or data is being moved between servers with different time zones, defaults to on use --skip-tz-utc to disable.
--skip-tz-utc
--use-savepoints Use savepoints to reduce metadata locking issues, needs SUPER privilege
--success-on- Not increment error count and Warning instead of Critical in case of table doesn't exist
--lock-all-tables Use LOCK TABLE for all, instead of FTWRL
-U, --updated-since Use Update_time to dump only tables updated in the last U days
--trx-consistency-only Transactional consistency only
-h, --host The host to connect to
-u, --user Username with privileges to run the dump
-p, --password User password
-P, --port TCP/IP port to connect to
-S, --socket UNIX domain socket file to use for connection
-t, --threads Number of threads to use, default
-C, --compress-protocol Use compression on the MySQL connection
-V, --version Show the program version and exit
-v, --verbose Verbosity of output, = silent, = errors, = warnings, = info, default ###create a big MyISAM table.###
root@localhost:mysql3306.sock [zlm]::>create table test_myisam(
-> id int primary key
-> ) engine=myisam;
Query OK, rows affected (0.00 sec) root@localhost:mysql3306.sock [zlm]::>delimiter $$
root@localhost:mysql3306.sock [zlm]::>create procedure pro_insert (count int)
-> begin
-> declare i int unsigned default ;
-> start transaction;
-> while i < count do
-> insert into test_myisam(id) values(i);
-> set i=i+;
-> end while;
-> commit;
-> end;
-> $$
Query OK, rows affected (0.00 sec) root@localhost:mysql3306.sock [zlm]::>delimiter ;
root@localhost:mysql3306.sock [zlm]::>call pro_insert();
Query OK, rows affected ( min 37.72 sec) root@localhost:mysql3306.sock [zlm]::>select count(*) from test_myisam;
+----------+
| count(*) |
+----------+
| |
+----------+
row in set (0.03 sec) root@localhost:mysql3306.sock [zlm]::>show tables;
+----------------+
| Tables_in_zlm |
+----------------+
| semi_sync_test |
| t1 |
| t2 |
| t3 |
| test |
| test_flashbk |
| test_myisam |
+----------------+
rows in set (0.06 sec) root@localhost:mysql3306.sock [zlm]::>show create table test;
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| test | CREATE TABLE `test` (
`id` bigint() NOT NULL AUTO_INCREMENT,
`name` varchar() NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT= DEFAULT CHARSET=utf8mb4 |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
row in set (0.00 sec) ###Generate a backup by threads.###
[root@zlm1 :: ~/mydumper-0.9.]
#mydumper -B zlm -T test,test_myisam -u root -p Passw0rd -h localhost -t -o /data/backup -- -t specify threads(default ) in all. [root@zlm1 :: ~/mydumper-0.9.] ###Check the output file.###
[root@zlm1 :: ~/mydumper-0.9.]
#ls -l /data/backup
total
drwxr-x--- root root Jun : --16_11--
-rw-r--r-- root root Jun : metadata -- It contains time,binlog file & position,GTID informations.
-rw-r--r-- root root Jun : zlm-schema-create.sql -- It contains database structure.
-rw-r--r-- root root Jun : zlm.test_myisam-schema.sql -- It contains table structure.
-rw-r--r-- root root Jun : zlm.test_myisam.sql -- It contains data of MyISAM table "test_myisam".
-rw-r--r-- root root Jun : zlm.test-schema.sql -- It contains table structure.
-rw-r--r-- root root Jun : zlm.test.sql -- It contains data of innodb table "test". ###Check the general log for detail of backup.###
[root@zlm1 :: /data/mysql/mysql3306/data]
#cat zlm1.log --17T16::.634569Z Connect root@localhost on zlm using Socket
--17T16::.634595Z Query SET SESSION wait_timeout =
--17T16::.634670Z Query SET SESSION net_write_timeout =
--17T16::.634819Z Query SHOW PROCESSLIST
--17T16::.634902Z Query FLUSH TABLES WITH READ LOCK -- Begin to generate FTWRL in order to have consistent backup.
--17T16::.634997Z Query START TRANSACTION /*!40108 WITH CONSISTENT SNAPSHOT */ -- create consistent snapshot.
--17T16::.635072Z Query /*!40101 SET NAMES binary*/
--17T16::.635125Z Query SHOW MASTER STATUS
--17T16::.635205Z Query SHOW SLAVE STATUS
--17T16::.636261Z Connect root@localhost on using Socket -- Create sub thread # in backing up.
--17T16::.636392Z Query SET SESSION wait_timeout =
--17T16::.636443Z Query SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
--17T16::.636479Z Query START TRANSACTION /*!40108 WITH CONSISTENT SNAPSHOT */
--17T16::.636527Z Query /*!40103 SET TIME_ZONE='+00:00' */
--17T16::.636570Z Query /*!40101 SET NAMES binary*/
--17T16::.636913Z Connect root@localhost on using Socket -- Create sub thread # in backing up.
--17T16::.636962Z Query SET SESSION wait_timeout =
--17T16::.637005Z Query SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
--17T16::.637039Z Query START TRANSACTION /*!40108 WITH CONSISTENT SNAPSHOT */
--17T16::.637084Z Query /*!40103 SET TIME_ZONE='+00:00' */
--17T16::.637123Z Query /*!40101 SET NAMES binary*/
--17T16::.637178Z Init DB zlm
--17T16::.637219Z Query SHOW TABLE STATUS
--17T16::.772453Z Query SHOW CREATE DATABASE `zlm`
--17T16::.772650Z Query SELECT /*!40001 SQL_NO_CACHE */ * FROM `zlm`.`test_myisam`
--17T16::.772927Z Query SELECT /*!40001 SQL_NO_CACHE */ * FROM `zlm`.`test`
--17T16::.848929Z Query SHOW CREATE TABLE `zlm`.`test` -- Get the table structure of "test".
--17T16::.961590Z Query SHOW CREATE TABLE `zlm`.`test_myisam` -- Get the table structure of "test_myisam".
--17T16::.022712Z Query UNLOCK TABLES /* FTWRL */ -- Release table locks after get structure of tables.
--17T16::.022724Z Quit
--17T16::.022812Z Quit
--17T16::.024460Z Quit ###Generate a backup by threads.###
[root@zlm1 :: ~/mydumper-0.9.]
#mydumper -B zlm -T test,test_myisam -u root -p Passw0rd -h localhost -t -o /data/backup [root@zlm1 :: ~/mydumper-0.9.]
# ###Check the general log for detail of backup.###
[root@zlm1 :: /data/mysql/mysql3306/data]
#cat zlm1.log --17T17::.654622Z Connect root@localhost on zlm using Socket
--17T17::.654864Z Query SET SESSION wait_timeout =
--17T17::.654922Z Query SET SESSION net_write_timeout =
--17T17::.655009Z Query SHOW PROCESSLIST
--17T17::.655072Z Query FLUSH TABLES WITH READ LOCK
--17T17::.656485Z Query START TRANSACTION /*!40108 WITH CONSISTENT SNAPSHOT */
--17T17::.656577Z Query /*!40101 SET NAMES binary*/
--17T17::.656744Z Query SHOW MASTER STATUS
--17T17::.656832Z Query SHOW SLAVE STATUS
--17T17::.657303Z Connect root@localhost on using Socket -- Create sub thread # in backing up.
--17T17::.657367Z Query SET SESSION wait_timeout =
--17T17::.657416Z Query SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
--17T17::.657453Z Query START TRANSACTION /*!40108 WITH CONSISTENT SNAPSHOT */
--17T17::.657503Z Query /*!40103 SET TIME_ZONE='+00:00' */
--17T17::.657547Z Query /*!40101 SET NAMES binary*/
--17T17::.658353Z Connect root@localhost on using Socket -- Create sub thread # in backing up.
--17T17::.658438Z Query SET SESSION wait_timeout =
--17T17::.658485Z Query SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
--17T17::.658568Z Query START TRANSACTION /*!40108 WITH CONSISTENT SNAPSHOT */
--17T17::.658631Z Query /*!40103 SET TIME_ZONE='+00:00' */
--17T17::.658689Z Query /*!40101 SET NAMES binary*/
--17T17::.659442Z Connect root@localhost on using Socket -- Create sub thread # in backing up.
--17T17::.659541Z Query SET SESSION wait_timeout =
--17T17::.659580Z Query SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
--17T17::.659581Z Query START TRANSACTION /*!40108 WITH CONSISTENT SNAPSHOT */
--17T17::.659581Z Query /*!40103 SET TIME_ZONE='+00:00' */
--17T17::.659614Z Query /*!40101 SET NAMES binary*/
--17T17::.659992Z Connect root@localhost on using Socket -- Create sub thread # in backing up.
--17T17::.660057Z Query SET SESSION wait_timeout =
--17T17::.660106Z Query SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
--17T17::.660144Z Query START TRANSACTION /*!40108 WITH CONSISTENT SNAPSHOT */
--17T17::.660193Z Query /*!40103 SET TIME_ZONE='+00:00' */
--17T17::.660236Z Query /*!40101 SET NAMES binary*/
--17T17::.660801Z Init DB zlm
--17T17::.661053Z Query SHOW TABLE STATUS
--17T17::.662581Z Query SHOW CREATE DATABASE `zlm`
--17T17::.662906Z Query SELECT /*!40001 SQL_NO_CACHE */ * FROM `zlm`.`test_myisam`
--17T17::.669514Z Query SELECT /*!40001 SQL_NO_CACHE */ * FROM `zlm`.`test`
--17T17::.674024Z Query SHOW CREATE TABLE `zlm`.`test`
--17T17::.681205Z Query SHOW CREATE TABLE `zlm`.`test_myisam`
--17T17::.548006Z Query UNLOCK TABLES /* FTWRL */
--17T17::.548426Z Quit
--17T17::.548509Z Quit
--17T17::.548552Z Quit
--17T17::.548619Z Quit
--17T17::.549291Z Quit
Summary
  • mydump is a logical backup tool like mysqldump,but more efficient.
  • mydump support mutiple thread backup,which can short your backup time especially when backing up big tables.
  • When backing up operation begins there also a FTWRL to make a consistent backup.

MySQL备份恢复之mydumper的更多相关文章

  1. Mysql 备份恢复之 Mysqldump 工具

    目前正在学习中,看到mysqldump工具导出的数据都是文本形式的,如果是blob或text大对象类型导出的是什么格式的?这个需要后续研究.下面只先总结下简单的. 一.备份1.备份Mysql一个数据库 ...

  2. MySQL备份恢复之Xtrabackup

    Preface       Today,I'm gonna use the Xtrabackup tool to demonstrate the procedure of backing up MyS ...

  3. MySQL备份恢复之mysqldump

      Preface       The day before yesterday,there's a motif about the lock procedure when backing up My ...

  4. mysql备份工具 :mysqldump mydumper Xtrabackup 原理

    备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之百的数据(取决于备份周期),但至少能将损失降到最低.衡量备份恢复有两个重要的指标:恢复点目标(RPO)和恢复时间目标(R ...

  5. MySQL多线程备份工具:mydumper

    MySQL多线程备份工具:mydumper http://www.orczhou.com/index.php/2011/12/how-to-split-mysqldump-file/ Mydumper ...

  6. MySQL备份还原之一mydumper

    1)源码编译安装 1.下载 mydumper源码 2.解压 [mysql@localhost ~]$ tar -xvf mydumper-0.9.1.tar mydumper-0.9.1/CMakeL ...

  7. MySQL备份迁移之mydumper

    简介 mydumper 是一款开源的 MySQL 逻辑备份工具,主要由 C 语言编写.与 MySQL 自带的 mysqldump 类似,但是 mydumper 更快更高效. mydumper 的一些优 ...

  8. MySQL备份原理详解

    备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之百的数据(取决于备份周期),但至少能将损失降到最低.衡量备份恢复有两个重要的指标:恢复点目标(RPO)和恢复时间目标(R ...

  9. mysql 备份与还原

    http://dev.yesky.com/281/35291281.shtml 每一种逻辑错误发生的概率都极低,但是当多种可能性叠加的时候,小概率事件就 放大成很大的安全隐患,这时候备份的必要性就凸显 ...

随机推荐

  1. python unix时间戳

    这是第一次用着python感到怒了,从datetime转化到timestamp数值居然没有直接的函数 直接获取当前时间戳倒是方便: import time timestamp = time.time( ...

  2. Csharp:asp.net CheckBoxList databind

    /// <summary> /// CheckBoxList數據源 /// 塗聚文 /// 20130705 /// /// </summary> private void s ...

  3. Scrapy框架之代理和cookie

    Cookie 是在 HTTP 协议下,服务器或脚本可以维护客户工作站上信息的一种方式.Cookie 是由 Web 服务器保存在用户浏览器(客户端)上的小文本文件,它可以包含有关用户的信息.无论何时用户 ...

  4. 【HTML&CSS】文本的基本处理

    其实在写这篇博客的时候已经学了很久,也写了不少代码,特别是很枯燥的看完整个html部分,因为不带有CSS写出来的东西干巴巴的一点也不好看. 直到展开CSS学习才开来补上博客,嗯,这是个好习惯. 这是运 ...

  5. 提交自己的包到 npm 中

    npm npm全称Node Package Manager,是node.js的模块依赖管理工具.使用github管理NPM包的代码,并定期提交至NPM服务器:npm官网 提交自己开发的NPM包 创建p ...

  6. 菜鸟学习Spring——SpringMVC注解版解析不同格式的JSON串

    一.概述 不同格式的JSON串传到后台来实现功能这个是我们经常要做的一件事,本篇博客就给大家介绍四种不同的JSON串传到后台后台如何用@RequestBody解析这些不同格式的JSON串的. 二.代码 ...

  7. Android自定义之ScrollView下拉刷新

    公司项目,需要用到ScrollView的下拉刷新,一开始使用的时候PullToRefresh三方库的下拉刷新,我比较纠结第三档库,很强大,但是,公司项目的需求,PullToRefresh就不能做到了, ...

  8. BIEE入门(二)物理层的定义

    使用BIEE的第一步是使用admintool去建立一个多维数据模型,而建立多维数据模型的第一步则是建立物理层,请注意因为BIEE本身并不存 储数据,所以所谓BIEE物理层的意义是需要在BIEE里建立各 ...

  9. TOEFL考试(一年半的复仇,裸考)

    8/11/2018 had a TOEFL test without preparation. Reading (worry about too much, not familiar with the ...

  10. 设计模式——装饰模式(Decorator Pattern)

    装饰模式:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活. UML图: 模型类: Component类: package com.cnblog.clarck; /** ...