原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://mrcto.blog.51cto.com/1923168/1437287

内容预览:

1、MaxScale简介

2、MaxScale安装

3、MaxScale配置

4、MaxScale简单测试

5、MaxScale Debug Interface和CLI

6、MaxScale调试

7、可用资源

(文中图片普遍偏小,请点击看高清大图)


1、MaxScale简介

    项目地址:https://github.com/skysql/MaxScale/

MaxScale是由http://www.skysql.com/开发的一款MySQL数据库中间件。

  • MaxScale是什么(摘自Github/MaxScale):

The SkySQL MaxScale is an intelligent proxy that allows forwarding of
database statements to one or more database servers using complex rules,
a semantic understanding of the database statements and the roles of
the various servers within the backend cluster of databases. MaxScale is designed to provide load balancing and high availability
functionality transparantly to the applications. In addition it provides
a highly scalable and flexibile architecture, with plugin components to
support different protocols and routing decissions. MaxScale is implemented in C and makes entensive use of the
asynchronous I/O capabilities of the Linux operating system. The epoll
system is used to provide the event driven framework for the input and
output via sockets.

简单的说就是:MaxScale是一个支持高可用,负载均衡,具有良好的可扩展性,高性能的基于事件驱动的同时具有代理和管理功能的中间件。

  • Architecture:

如图所示,MaxScale由以下几个模块组成:

Protocol,Router,Monitor,Authentication,Filter and logging.

MaxScale运行在clinet与server之间,起到一个”Exchange”的作用.

需要知道的是:client并不会直接与server建立连接,而是通过MaxScale来做连接创建和数据交换,MaxScale接收client的请求,经过(或不经过)Filter处理当前的Request,然后通过Router将client发送的request发送到后端server,server返回的数据经过(或不经过)处理之后再返回给client。MaxScale同时维护client请求的连接和到server的连接。

Client与Server、MaxScale之间的关系如图:

1)Protocol:分为client protocol和back-end protocol.

client目前尽支持MySQL以及MariaDB,

back-end目前支持以下几种类型的后端集群:

MySQL Replication
MariaDB Replication
Galera Cluster on both MySQL and MariaDB
MySQL Server with NDB storage engine

2)Router:Connection-based Routing和Statement-based Routing.

Connection-based

Routing:client连接到maxscale之后,会为该client维护一个路由,同一个连接会始终通过这条路由,并且不检查当前连接下的产生
的不同的请求,该路由一旦创建便会一直存在直到客户端连接断开。适合读请求和写请求使用不同的连接的场景。

Statement-based Routing:对同一个连接产生的不同的请求动态的路由到一个或多个后端的数据库做处理。此类型路由可使得应用程序端操作非常简单,读写分离以及负载均衡均对应用透明。

当MaxScale发现一个正在被客户端使用的连接在连接到后端server时发生错误导致连接失败的时候,MaxScale会自动重建一个到后端server的新的连接用来代替失效的连接,使得让客户端无感。

3)Authentication:

MaxScale
用从后端服务器获取到的user表作为客户端授权的依据,为了能验证用户连接,MaxScale从后端数据库中读取mysql.user表信息,并将此用
户信息缓存在MaxScale端,当用户连接进来会根据缓存的信息判断是否通过验证,如果当前缓存无此用户,会从后端数据库中更新用户信息,并作验证。

4)Filter & Logging:

Filter可比作database-level firewall,它可用于对某些特殊statement进行过滤或者Rewrite。适用于简单类型的语句容错,以及语句的自动转换。

Rewrite:

Fault Tolerance:

5)Monitor:

用于对后端数据库池的实时监控,目前只支持MySQL master/slave replication和Galera cluster。


2、MaxScale安装

  • 安装准备工作

测试环境准备:

CentOS 6.5 x86_64:172.16.238.128 Master MySQL-5.6.19

CentOS 6.5 x86_64:172.16.238.129 Slave MySQL-5.6.19

CentOS 6.5 x86_64:172.16.238.130 Slave MySQL-5.6.19

CentOS 6.5 x86_64:172.16.238.131 Slave MySQL-5.6.19

CentOS 6.5 x86_64:172.16.238.132 MaxScale

配置好主从,并开启半同步。

安装包下载地址:

Binary package:https://downloads.skysql.com/files/SkySQL/MaxScale
Source package:http://github.com/skysql/MaxScale

  • 从binary包安装

1)解压:

tar -zxvf maxscale.1.0.0-beta.tar.gz

2)将解压的文件夹拷贝到安装目录即可:

mv maxscale-1.0.0-beta /usr/local/maxscale

3)maxscale程序启动需要读取两个环境变量MAXSCALE_HOME和LD_LIBRARY_PATH

export MAXSCALE_HOME=/usr/local/maxscale

export LD_LIBRARY_PATH=/usr/local/maxscale/lib

如果需要永久生效还需将这两行添加到profile或者.bashrc

4)拷贝MySQL配置文件 my.cnf 到 $MAXSCALE_HOME/mysql/.

cp /etc/my.cnf /usr/local/maxscale/mysql/my.cnf

5)拷贝默认配置文件

cd /usr/local/maxscale/etc/

cp MaxScale_template.cnf MaxScale.cnf

默认配置使用了3000,3001,3002三个mysql监听端口,根据实际情况修改即可。

6)启动maxscale

MaxScale默认会根据$MAXSCALE_HOME变量从$MAXSCALE_HOME/etc目录中查找配置文件MaxScale.cnf。
如果变量$MAXSCALE_HOME没有设置,则查找/etc/MaxScale.cnf文件。

以下三种启动方式均可:

export MAXSCALE_HOME=/usr/local/maxscale

/usr/local/maxscale/bin/maxscale

或者

/usr/local/maxscale/bin/maxscale -c /usr/local/maxscale/

或者

/usr/local/maxscale/bin/maxscale -f /usr/local/maxscale/etc/MaxScale.cnf

  • 从源码安装

作者原文:https://groups.google.com/forum/#!topic/maxscale/1NA_0Ni58X4

下文根据实际情况有所修改:
1)获取源码原文:
我不用git工具下载,而是直接从Github获取源码zip包

wget https://github.com/skysql/MaxScale/archive/master.zip -O MaxScale-src-1.0.zip

2)配置MariaDB安装源(由于只用于编译maxscale故不用安装MariaDB-server)

vi /etc/yum.repos.d/mariadb.repo

写入 :
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

保存退出。

3)安装MariaDB-devel

(请直接安装mariadb-devel,没必要尝试mysql-devel,因为,我尝试过了,原因,你试试就知道)

yum install MariaDB-devel

如果网络不给力就直接下载rpm包(比如我)
wget https://downloads.skysql.com/files/MariaDB/yum/5.5/centos6-amd64/rpms/MariaDB-5.5.38-centos6-x86_64-devel.rpm
如果安装过程中发现提示冲突,那是因为已有mysql相关的包,请直接卸载即可rpm -e 或者yum remove。

4)安装编译MaxScale所需必要依赖:
yum -y install make gcc gcc-c++ ncurses-devel bison glibc-devel openssl-devel libaio-devel telnet

5)修改源码包中的配置文件

unzip MaxScale-src-1.0.zip
cd /root/MaxScale-master/

vi 修改根目录下 build_gateway.inc 文件中以下几项

ROOT_PATH := $(HOME)/MaxScale-master (此处需注意,$HOME指的是当前用户环境变量HOME,我用root运行,解压后文件夹为/root/MaxScale-master,如果是其他位置直接用绝对路径)

INC_PATH := /usr/include

MYSQL_ROOT := $(INC_PATH)/mysql

EMBEDDED_LIB := /usr/lib64  (mariadb-devel安装后libmysqld.a在这个目录下)

ERRMSG := /usr/share/mysql/english

保存退出

6)开始编译

make depend
make all
make DEST=/usr/local/maxscale/ install

7)拷贝启动脚本和配置文件

cp etc/init.d/maxscale /etc/init.d/

cp etc/MaxScale_template.cnf /usr/local/maxscale/etc/MaxScale.cnf

8)maxscale程序启动需要读取两个环境变量MAXSCALE_HOME和LD_LIBRARY_PATH

export MAXSCALE_HOME=/usr/local/maxscale

export LD_LIBRARY_PATH=/usr/local/maxscale/lib

如果需要永久生效还需将这两行添加到profile或者.bashrc

9)这时启动maxscale和binary安装方式类似,也可以使用service maxscale start启动

可以任选一种方式安装使用,安装完成后各个文件位置如下图:

需要注意的就是etc目录下的passwd文件是在debug interface创建用户之后自动生成的。


3、MaxScale配置和启动

针对各项配置详细解读请看安装包里面的文档MaxScale Configuration And Usage Scenarios.pdf

配置文件主要结构如下图所示:

1)详细配置如下:

配置文件为/usr/local/maxscale/etc/MaxScale.cnf

grep -v "^#" /usr/local/maxscale/etc/MaxScale.cnf | grep -v "^$"
 [maxscale]
 threads=1
[MySQL Monitor]
 type=monitor
 module=mysqlmon
 servers=server1,server2,server3,server4
 user=maxmonuser
 passwd=C891A19D7EFAF3B59AF7948E5AE3B998
[RW Split Router]
 type=service
 router=readwritesplit
 servers=server1,server2,server3,server4
 max_slave_replication_lag=5
 user=maxuser
 passwd=A71E58147EBD73986D3D074E80F00DB9
[Read Connection Router]
 type=service
 router=readconnroute
 router_options=slave
 servers=server1,server2,server3,server3
 user=maxuser
 passwd=A71E58147EBD73986D3D074E80F00DB9
[HTTPD Router]
 type=service
 router=testroute
 servers=server1,server2,server3,server4
[Debug Interface]
 type=service
 router=debugcli
 servers=server1
[CLI]
 type=service
 router=cli
[RW Split Listener]
 type=listener
 service=RW Split Router
 protocol=MySQLClient
 port=4006
 enable_root_user=1
[Read Connection Listener]
 type=listener
 service=Read Connection Router
 protocol=MySQLClient
 port=4008
 enable_root_user=1
[Debug Listener]
 type=listener
 service=Debug Interface
 protocol=telnetd
 port=4442
 address=127.0.0.1
[HTTPD Listener]
 type=listener
 service=HTTPD Router
 protocol=HTTPD
 port=6444
[CLI Listener]
 type=listener
 service=CLI
 protocol=maxscaled
 address=127.0.0.1
 port=6603
[server1]
 type=server
 address=172.16.238.128
 port=3306
 protocol=MySQLBackend
[server2]
 type=server
 address=172.16.238.129
 port=3306
 protocol=MySQLBackend
[server3]
 type=server
 address=172.16.238.130
 port=3306
 protocol=MySQLBackend
[server4]
 type=server
 address=172.16.238.131
 port=3306
 protocol=MySQLBackend

2)配置里面用到的user需要在后端的各个mysql server里面建立用户并授权。

create user 'maxuser'@'172.16.238.132' identified by 'maxpwd';
 grant SELECT on mysql.user to 'maxuser'@'172.16.238.132';

maxmonuser用于监控后端服务器状态

create user 'maxmonuser'@'172.16.238.132' identified by 'maxmonpwd';
 grant REPLICATION SLAVE on *.* to 'maxmonuser'@'172.16.238.132';
 grant REPLICATION CLIENT on *.* to 'maxmonuser'@'172.16.238.132';

另 外新建一个maxscale用于测试,此用户不在配置文件中,且尽量不用root用户,因为maxscale默认不允许root连接后端数据库,需要在管 理界面enable root “some service” 才能开放root登录,目前maxscale还不支持类似172.16.238.%以%作模糊匹配的主机地址,会报错

create user 'maxscale'@'%' identified by 'maxscalepass';
 grant ALL PRIVILEGES on *.* to 'maxscale'@'172.16.238.132';

为了使得配置文件中不以明文方式存放密码,maxscale自带了加密工具用于获取加密后的字符串,maxscale在读取加密字符串之后会自动解密。

进入/usr/local/maxscale/bin/目录

./maxkeys $MAXSCALE_HOME/etc/.secrets
加密maxuser密码
 ./maxpasswd maxpwd
 A71E58147EBD73986D3D074E80F00DB9
加密maxmonuser密码
 ./maxpasswd maxmonpwd
 C891A19D7EFAF3B59AF7948E5AE3B998

至此,MaxScale配置完成,现在启动MaxScale。

3)启动MaxScale

[root@db132 bin]# /usr/local/maxscale/bin/maxscale

SkySQL MaxScale 0.7.0 Mon Jun 30 23:03:54 2014
——————————————————
Info : MaxScale will be run in a daemon process.
See the log from the following log files :

Error log : /usr/local/maxscale/log/skygw_err1.log
Message log : /usr/local/maxscale/log/skygw_msg1.log
Trace log : /usr/local/maxscale/log/skygw_trace1.log
Debug log : /usr/local/maxscale/log/skygw_debug1.log

Listening MySQL connections at 0.0.0.0:4006
Listening MySQL connections at 0.0.0.0:4008
Listening http connections at 0.0.0.0:6444
Listening telnet connections at 127.0.0.1:4442

或直接启动服务

[root@db132 ~]# service maxscale start
Starting MaxScale: maxscale (pid 54649) is running… [ OK ]

启动服务后,观察启动日志:

1.0beta版还会加载libmaxscaled.so模块。


4、MaxScale简单测试

1)连接测试,通过maxscale监听的端口4006或者4008连接后端数据库,默认会route到master

[root@db132 bin]# mysql -umaxscale -pmaxscalepass -h172.16.238.132 -P4006
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6385
Server version: 5.5.35-MariaDB MySQL Community Server (GPL)

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql>

准备工作:

创建一个库d,并简单的表t,并在每个server中开启general log。

2)测试查询

mysqlslap -umaxscale -pmaxscalepass -h172.16.238.132 -P4006 \
 --create-schema=d --query=select.sql \
 --concurrency=6 --number-of-queries 1 --iterations=1 --debug-info
查询语句:
 cat select.sql
 select * from t;
 select * from t;
 select * from t;

执行结果:

可以看到查询被均匀的路由到三个从库。

3)测试插入

mysqlslap -umaxscale -pmaxscalepass -h172.16.238.132 -P4006 \
 --create-schema=d --query=insert.sql \
 --concurrency=1 --number-of-queries 4 --iterations=1 --debug-info
cat insert.sql
 insert into t values(20,'x');
 insert into t values(30,'xx');
 insert into t values(40,'xxx');
 insert into t values(50,'xxxx');

执行结果:

可以看到,主库接收了所有写操作,并且全部同步到了从库,从库可看到更新操作记录。

4)测试更新

mysqlslap -umaxscale -pmaxscalepass -h172.16.238.132 -P4006 \
 --create-schema=d --query=update.sql \
 --concurrency=1 --number-of-queries 1 --iterations=1 --debug-info
cat update.sql
 update t set str='yy' where id=2;

执行结果:

同样,更新操作的操作记录跟插入类似,主库上执行,然后同步到从库。

5)测试事务

[root@db129 mysql]# mysql -umaxscale -pmaxscalepass -h172.16.238.132 -P4006

测试两次事务操作,一次提交,一次不提交。

mysql> begin;
 mysql> select * from t where id=1 for update;
 mysql> update t set str='zz' where id=1;
 mysql> \q
mysql> begin;
 mysql> select * from t where id=1 for update;
 mysql> update t set str='zz' where id=1;
 mysql> commit;
 mysql> \q

执行结果:

可以看到,第一次开启事务,执行操作,不提交,在主库上看到更新操作记录,从库无记录,第二次开始事务并提交,从库会更新生效的一条记录。

读写测试基本完成,目前未发现任何问题,还需在物理机上测试看看高并发下的处理能力。

maxscale对每个后端server作定期检查,检查的时间间隔由参数monitor_interval控制,默认10000ms。

MaxScale会根据语句类型作路由,在trace日志中可以看到如下记录:


5、MaxScale Debug Interface 和 CLI

前面的配置中可以看到,定义了一个Debug Interface和一个CLI service,MaxScale可以通过telnet连接到Debug Interface进行一系列的管理操作,同时也可以通过CLI做相关操作。

  • Debug Interface

1)使用telnet登录管理界面:

#telnet 127.0.0.1 4442

默认用户名是admin,密码是skysql

可以使用add user username password 覆盖默认的用户名密码

使用show users可以看到当前的所有用户

2)控制monitor

monitor可以定义多个,如果需要停用monitor可以使用shutdown命令。

show,shutdown,restart monitor

3)控制service

maxscale可以同时开启多个Router并监听端口,如果需要关闭其中某个类型的router,可以使用shutdown命令,重新启用使用restart命令。(下图重启失败,应该是bug,尝试多次)

show,shutdown,restart service

4)控制server

如果需要临时对某个主机进行维护,可以设置server为maintenance状态,maxscale将不会再派发请求到该server,维护完成后,清楚此状态即可。

show,set,clear server

5)控制log

enable启用

disable停用

MaxScale> enable log debug
MaxScale> enable log trace

6)停机维护

对于service down的mysql服务器,可以手动设置维护模式,以不影响其他server,但是mascale会不停的探测该server是否重新运行。

server down之后master会发出如下两种提示,设置maintenance之后err信息将停止。

#msg
 Jul 8 23:06:02 db132 MaxScale[53927]: Backend server 172.16.238.131:3306 state : NO STATUS
#err
 Jul 8 23:06:12 db132 MaxScale[53927]: Error : Monitor was unable to connect to server 172.16.238.131:3306 : "Can't connect to MySQL server on '172.16.238.131' (111)"

其他命令可自由发挥。

  • CLI(1.0beta)

CLI模式即可以在shell中直接使用maxadmin工具查看maxscale的状态,需要配置CLI 以及 CLI Listener两个Section。

可能你要问这个工具跟debug interface有什么区别?

区别就在于跟交互式的debug interface相比,maxadmin可以用于监控任何一个需要监控的对象,servers,service,dcbs,sessions,users等等。你可以把要检查的内容列出来像写shell脚本那样写入脚本中一起执行。


6、MaxScale调试模式

maxscale支持debug模式

#gdb maxscale

(gdb) run --d

此时ctl+c即可进入调试模式,可以调用一些function。

call printAllServers()

call printAllSessions()

call printServer(xxx)和call printSession(xxx)

结果跟debug interface和maxadmin输出结果一样。

MaxScale里面还有一个很重要的概念,那就是DCB(Descriptor Control Block )

一 个DCB(Descriptor Control Block)表示一个在MaxScale内部的连接的状态,每个来自client的连接、到后端server的连接、以及每个listener都会被分配 一个DCB,这些连接的状态统计由这些DCB来完成。每个DCB并不会有特定的名字用于查询,而是直接使用具有唯一性的内存地址。

一个DCB的生命周期:

同样可以通过Debug Interface查看DCB相关信息:

压测的时候可以看到DCB状态变化:


7、可用资源

几个非常直观的介绍:

http://www.slideshare.net/izoratti/140116-max-scale-for-effectivemysql
http://www.slideshare.net/skysql/maxscale-the-pluggibale-router-mariadb-roadshow-2014-paris
http://www.slideshare.net/skysql/maxscale-the-pluggable-router-36239961

http://files.meetup.com/107604/MaxScale_Overview_DBA_Hangout20140122.pdf
https://mariadb.com/resources/maxscale(Demo)

较老版本的一个安装配置文档:

http://www.skysql.com/blogs/anderskarlsson/maxscale-rest-us-part-1

http://www.skysql.com/blogs/anderskarlsson/maxscale-rest-us-part-2

http://www.skysql.com/blogs/anderskarlsson/maxscale-rest-us-part-3

http://www.skysql.com/blogs/anderskarlsson/maxscale-rest-us-part-4

Google Group:https://groups.google.com/forum/#!forum/maxscale

Bug Report:http://bugs.skysql.com/enter_bug.cgi?product=Maxscale

以及安装包里自带的非常有用的几个Document:

Documentation/
├── Debug And Diagnostic Support.pdf
├── filters
│   ├── QLA Filter.pdf
│   ├── Regex Filter.pdf
│   ├── Tee Filter.pdf
│   └── Top Filter.pdf
├── history
│   ├── MaxScale 0.5 Release Notes.pdf
│   ├── MaxScale 0.6 Release Notes.pdf
│   └── MaxScale 0.7 Release Notes.pdf
├── internal
│   └── DCB states.pdf
├── MaxAdmin The MaxScale Administration And Monitoring Client.pdf
├── MaxScale 1.0beta Release Notes.pdf
├── MaxScale Configuration And Usage Scenarios.pdf
└── MaxScale HA with Corosync and Pacemaker.pdf


Coming Soon:

  • MaxScale结合MHA

  • MaxScale结合Pacemaker+Corosync

  • 更详细的测试(Filter)

  • 压力测试

以上内容完全基于本人理解得来,如有理解有误的地方还请指出,以便及时改正。

部分bug已通过Google Group反馈给该软件的作者,当前的各个版本,包括最新版1.0beta版仍存在很多运行不顺畅的地方,所以遇到问题,要从多方面去考虑,去排查,如果能确定是bug,直接反馈就可以了。

本文出自 “张跃的部落格” 博客,请务必保留此出处http://mrcto.blog.51cto.com/1923168/1437287

MaxScale初探的更多相关文章

  1. 初探领域驱动设计(2)Repository在DDD中的应用

    概述 上一篇我们算是粗略的介绍了一下DDD,我们提到了实体.值类型和领域服务,也稍微讲到了DDD中的分层结构.但这只能算是一个很简单的介绍,并且我们在上篇的末尾还留下了一些问题,其中大家讨论比较多的, ...

  2. CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探

    CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码 ...

  3. 从273二手车的M站点初探js模块化编程

    前言 这几天在看273M站点时被他们的页面交互方式所吸引,他们的首页是采用三次加载+分页的方式.也就说分为大分页和小分页两种交互.大分页就是通过分页按钮来操作,小分页是通过下拉(向下滑动)时异步加载数 ...

  4. JavaScript学习(一) —— 环境搭建与JavaScript初探

    1.开发环境搭建 本系列教程的开发工具,我们采用HBuilder. 可以去网上下载最新的版本,然后解压一下就能直接用了.学习JavaScript,环境搭建是非常简单的,或者说,只要你有一个浏览器,一个 ...

  5. .NET文件并发与RabbitMQ(初探RabbitMQ)

    本文版权归博客园和作者吴双本人共同所有.欢迎转载,转载和爬虫请注明原文地址:http://www.cnblogs.com/tdws/p/5860668.html 想必MQ这两个字母对于各位前辈们和老司 ...

  6. React Native初探

    前言 很久之前就想研究React Native了,但是一直没有落地的机会,我一直认为一个技术要有落地的场景才有研究的意义,刚好最近迎来了新的APP,在可控的范围内,我们可以在上面做任何想做的事情. P ...

  7. 【手把手教你全文检索】Apache Lucene初探

    PS: 苦学一周全文检索,由原来的搜索小白,到初次涉猎,感觉每门技术都博大精深,其中精髓亦是不可一日而语.那小博猪就简单介绍一下这一周的学习历程,仅供各位程序猿们参考,这其中不涉及任何私密话题,因此也 ...

  8. Key/Value之王Memcached初探:三、Memcached解决Session的分布式存储场景的应用

    一.高可用的Session服务器场景简介 1.1 应用服务器的无状态特性 应用层服务器(这里一般指Web服务器)处理网站应用的业务逻辑,应用的一个最显著的特点是:应用的无状态性. PS:提到无状态特性 ...

  9. NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例

    一.消息队列场景简介 “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象.消息被发送到队列中,“消息队列”是在消息的传输过程中保存消息的容器 ...

随机推荐

  1. SQL Server 添加描述

    添加描述的格式 exec sys.sp_addextendedproperty @name = N'MS_Description' ,@value = 'value',@level0type=N'SC ...

  2. dos 下小tip

    tip 1:日期的格式化 方法如下: Echo %Date:~0,4%%Date:~5,2%%Date:~8,2%或者Set dt=%Date:~0,4%%Date:~5,2%%Date:~8,2%E ...

  3. python2行代码调用程序

    import win32api win32api.ShellExecute(0, 'open', r'C:\Users\TOPFEEL\AppData\Local\Postman\app-5.5.0\ ...

  4. keystore找回密码

    昨天准备给自己的应用发布一个新版本,在apk打包时,发现之前的用的keystore密码忘了. 蛋碎了一地,我把我所能想到的密码都试了一遍(注:我平常在各个门户网站注册基本上用的都是那几个字母和数字组合 ...

  5. linux创建ftp用户以及指定目录问题

    linux创建ftp用户以及指定目录问题 创建用户命令:如我的目录是根目录下的 MyWeb 用户名:xdh2571 #useradd -G ftp -d /MyWeb -M xdh2571#passw ...

  6. 61配置nanopim1plus的HDMI为1080p输出

    61配置nanopim1plus的HDMI为1080p输出 大文实验室/大文哥 壹捌陆捌零陆捌捌陆捌贰 21504965 AT qq.com 完成时间:2018/4/4 10:21 版本:V1.1 开 ...

  7. [转]MapReduce浅析

    本文转自http://edisonchou.cnblogs.com/ 一.什么是MapReduce MapReduce是Google的一项重要技术,它首先是一个编程模型,用以进行大数据量的计算.对于大 ...

  8. js类型识别

    typeof总结: 可以识别标准类型(Null除外) 不能识别具体的对象类型(Function除外) Object.prototype.toString总结: 可以识别标准类型和内置对象类型 不能识别 ...

  9. MFC_2.1使用单选和多选框

    使用单选和多选框 单选 1.拖控件 设置名字,CTRL+D设置顺序,属性设置第一个GROUP为TRUE: 2.设置第一个按钮绑定变量为 值 INT型 名称m_RadioIndxe; 3.设置单击响应内 ...

  10. 04Microsoft SQL Server 数据库创建,查看,使用,修改及删除

    Microsoft SQL Server 数据库创建,查看,使用,修改及删除 创建数据库 创建普通数据库 USE [master] GO CREATE DATABASE [MyDataBase] -- ...