由淘宝核心系统研发—数据库组开发的MySQL-Transfer,用于解决MySQL主从同步延迟的问题,从MySQL单线程到多线程的工作模式。可以观看@丁奇的相关资料:

MySQL多线程同步-Transfer使用说明
MySQL异步复制延迟解决的架构设计与运维架构—在线播放—优酷网

系统结构 :

传统的主从结构是 [Master] à [Slave], Master和slave主从关系;

使用transfer以后,[Master] à [Transfer] .--> [Slave], Master和Transfer主从关系,Transfer和Slave是Client-Server关系。

服务器环境:

主库:192.168.15.216   (3306端口)

从库:192.168.15.217   (3306端口)

Transfer: 192.168.15.217  (3307端口)

MySQL版本:mysql-5.5.18-linux2.6-x86_64.tar.gz

存储引擎:Innodb

Database: rocdata

MySQL-Transfer:Transfer.2.1-based-PS-5.5.18

注:

Tranfsfer相同的表使用同一个线程更新,若只有一个表,性能与原生版本相同。要体现效果,一般16个表或以上,考虑到线上大库都有分表,这个条件比较容易满足。

一、192.168.15.216主库配置

首先确认主库上使用row格式的binlog,配置/etc/my.cnf:

[client]

port            = 3306

socket          = /tmp/mysql.sock

[mysqld1]

port            = 3306

socket          = /tmp/mysql.sock

basedir=/usr/local/mysql

datadir=/mysqldata/

bind-address=192.168.15.216

skip-external-locking

skip-name-resolve

user=mysql

max_allowed_packet = 256M

query_cache_size=256M

max_connections=2000

max_connect_errors=10000

key_buffer_size=6000M

read_buffer_size=32M

read_rnd_buffer_size = 32M

myisam_sort_buffer_size=512M

tmp_table_size=1024M

old-passwords

interactive_timeout=60

wait_timeout=60

connect_timeout=60

table_cache=8192

thread_cache_size=512

sort_buffer_size=128M

back_log = 500

thread_concurrency=48

expire_logs_days=10

log-bin=mysql-bin

#binlog_format=STATEMENT

binlog_format=ROW

#binlog_format="MIXED

# master

server-id = 1

binlog-do-db = rocdata

binlog-ignore-db = mysql

启动MySQL,并查看Pos状态。

二、192.168.15.217从库配置。

MySQL端口3306和3307 ,建议MySQL TDIR目录区分开来。我的MySQL和Transfer目录:

/usr/local/mysql/

/usr/local/mysql-transfer

Transfer.2.1-based-PS-5.5.18替换T安装目录/usr/local/mysql-transfer/bin/下的mysqld。

1、配置3306端口,同步Master数据,这里不需要写主从同步信息,和单台MySQL配置一样。

/usr/local/mysql目录部署一个MySQL版本5.5.18(真实库),配置/etc/my.cnf:

[mysqld]

port            = 3306

socket          = /tmp/mysql.sock

basedir=/usr/local/mysql

datadir=/mysqldata/data3306

bind-address=192.168.15.217

skip-external-locking

skip-name-resolve

user=mysql

max_allowed_packet = 256M

query_cache_size=256M

max_connections=2000

max_connect_errors=10000

key_buffer_size=6000M

read_buffer_size=32M

read_rnd_buffer_size = 32M

myisam_sort_buffer_size=512M

tmp_table_size=1024M

old-passwords

interactive_timeout=60

wait_timeout=60

connect_timeout=60

table_cache=8192

thread_cache_size=512

sort_buffer_size=128M

back_log = 500

thread_concurrency=48

expire_logs_days=10

启动MySQL 3306端口,并导入数据,前提需要记录的Pos点,保证Transfer同步正常。和传统的主从拷贝数据一样。

此时3306端口的运行状态。

2、配置3307 Transfer服务

a) /usr/local/mysql-transfer/目录部署一个MySQL (T),版本5.5.18

b) 用附件中的mysqld替换T安装目录/usr/local/mysql-transfer/bin/下的mysqld

c) 在/usr/local/mysql-transfer/log 目录下执行下执行 for((i=0; i<=16; i++)); do mkdir $i;done

d) 配置/etc/my3307.cnf,做以下修改:

[mysqld]

port            = 3307

socket          = /tmp/mysql3307.sock

basedir=/usr/local/mysql

datadir=/mysqldata/data3307

bind-address=192.168.15.217

skip-external-locking

skip-name-resolve

user=mysql

max_allowed_packet = 1G

query_cache_size=256M

max_connections=2000

max_connect_errors=10000

key_buffer_size=6000M

read_buffer_size=32M

read_rnd_buffer_size = 32M

myisam_sort_buffer_size=512M

tmp_table_size=1024M

old-passwords

interactive_timeout=60

wait_timeout=60

connect_timeout=60

table_cache=8192

thread_cache_size=512

sort_buffer_size=128M

back_log = 500

thread_concurrency=48

expire_logs_days=10

#tranfer

transfer_slave_thread = 16

remote_slave_hostname = 192.168.15.217

remote_slave_username = transfer

remote_slave_password = transferpw

remote_slave_port = 3306

relay-log =/usr/local/mysql/log/mysqld-relay-bin

relay-log-index =/usr/local/mysql/log/mysqld-relay-bin.index

master-info-file =/usr/local/mysql/log/master.info

relay-log-info-file =/usr/local/mysql/log/relay-log.info

log_slave_updates = 0

slave_skip_errors=1062,1032

#slave 192.168.15.217

server-id = 3

replicate_do_db = rocdata

replicate-ignore-db = mysql

replicate-ignore-db = test

replicate-ignore-db = information_schema

[说明]配置给Transfer的这个uname必须有Slave的super权限 
        e) Transfer需要导入同步的数据库结构,不需要数据

f) Slave的 max_allowed_packet设置为1G (建议)

g) 启动Transfer并设置为Master的从库

具体步骤:

在3306端口上赋予Transfer 有Slave的super权限:

mysql> grant all privileges on  *.*  to  'transfer'@'192.168.15.217' identified by 'transferpw';

在主库192.168.15.216赋予Transfer 有 replicate  privileges权限:

mysql> grant replication slave, reload, super on *.* to 'repluser216'@'192.168.15.217' identified by 'replpasswd216';

启动Transfer并设置为Master的从库:

mysql> CHANGE MASTER to MASTER_HOST='192.168.15.216', MASTER_PORT=3306, MASTER_USER='repluser216', MASTER_PASSWORD='replpasswd216', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=82104;

三、测试

1、在192.168.15.216主库rocdate上创建表test,并写入数据:

mysql> create table test  (  id int(4));

mysql> insert into test values(1);

mysql> insert into test values(2);

2、查看192.18.15.216 MySQL(T)和MySQL真实库状态:    
        

说明:关于 MySQL-Transfer  的性能还未做测试,后期有时间会补上……有错误的地方,希望CU的大侠可以指正,谢谢

http://blog.chinaunix.net/uid-25266990-id-3515141.html

MySQL目前在互联网领域应用非常广阔一个数据库系统. MySQL主从数据库是常用的使用方法之一. 本文将通过基于vmware的Centos虚拟机来实验安装MySQL的主从方式部署.

一.Vmware 及linux环境安装

1. Vmware软件安装

Vmware是流行的虚拟机软件, vmare软件下载安装方法请到搜索引擎去搜索,有各种文章可以参考.

2. Linux系统安装

用户安装完成vmware系统后可以自行安装linux系统

我们这里给一个最方便的方式, 下载已经安装好的linux for vmware虚拟机软件.

网址如下: http://www.thoughtpolice.co.uk/vmware/  里面有很多已经安装好的linux的vmware系统.

本文是以下面的版本进行测试安装的.

64-bit: centos-5.6-x86_64-server.zip, 456M 
fast torrent download!web download 
md5sum: 2590006571f52ca00674d20d3b376672

3. 解压缩下载后的虚拟机文件到一个硬盘空间比较大的硬盘分区中.

4. 打开解压缩的文件目录

双击文件centos-5.5-x86_64-server.vmx,然后启动vmware虚拟机

点击图中红色区域的按钮, 启动虚拟机

5. 登录系统

如下图, 启动后系统如下界面

图中1位置表示当前虚拟机的运行状态

图中2位置表示当前虚拟机的名称, 例如图中有多个虚拟机, 当前正在看到到是 centos-5.5-x86_64-server这个虚拟机

图中3位置  表示当前用户 操作的键盘,鼠标还是在用户自己的计算机中, 你的输入,你的鼠标移动都是给你自己的操作系统的. 请特别注意 白色的鼠标箭头,这 个是最明显的看到你当前在那个系统下的标记.

用户需要在黑色窗口中心附近点击鼠标左键 ,这样就可以切换的键盘及鼠标操作到虚拟机中去.以后在输入键盘及鼠标移动等消息是发送给虚拟机的,你的本机程序将无法获得信息.(用户若是需要重虚拟机中退出请求等, 需要 按住左侧 的ctrl 同时在按住 左侧的 alt两个组合键,鼠标将退回到当前操作系统状态,用户可以继续输入数据了.)

用户点击鼠标左键后, 在登录页面可以输入用户名 :root

然后提示输入密码信息, 用户可以输入原始密码 :"thoughtpolice"(密码是双引号中内容)The root password for this image is "thoughtpolice".

6. 查看虚拟机ip地址

如上图:   图1. 处输入root(用户名)

图2. 输入密码thoughtpolice

图3. 输入ifconfig命令,

最后系统会显示下面的 提示信息

图4  处 是 本机当前ip地址.

7. 配置SecureCRT软件,

SecureCRT是一常见的linux终端软件,我们可以通过这个软件登录我们的虚拟机系统,完成各种操作,他的操作方法比直接在虚拟机上操作方便多了.软件的下载及安装大家自己去搜索及下载.

安装完成后, 启动软件, 然后点击

图1处 启动快速连接,

图2处 输入ip地址

图3处 输入用户名

二. MySQL安装

1. 安装前的准备工作

在SecureCRT登录后, 执行:  yum list | grep mysql 命令, 结果如下图:

然后显示相关的软件包列表, 右侧2的位置是软件报的相关信息.

若是出现下图的信息,

表示软件包已经被安装了,我们需要卸载他. (用 yum  remove 包名进行卸载, 这里可能需要的是:yum remove mysql.x86_64 ).

2. 配置mysql的yum数据源.

在命令行中输入: vi /etc/yum.repos.d/Percona.repo 打开vi编辑器

然后进入输入模式, 最后输入如下文本:

[percona]

name = CentOS $releasever – Percona

baseurl=http://repo.percona.com/centos/$releasever/os/$basearch/

enabled = 1

gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-percona

gpgcheck = 1

最后结果如下:

在命令提示行中 输入:vi /etc/pki/rpm-gpg/RPM-GPG-KEY-percona

然后输入文本:

—–BEGIN PGP PUBLIC KEY BLOCK—–

Version: GnuPG v1.4.9 (GNU/Linux)

mQGiBEsm3aERBACyB1E9ixebIMRGtmD45c6c/wi2IVIa6O3G1f6cyHH4ump6ejOi

AX63hhEs4MUCGO7KnON1hpjuNN7MQZtGTJC0iX97X2Mk+IwB1KmBYN9sS/OqhA5C

itj2RAkug4PFHR9dy21v0flj66KjBS3GpuOadpcrZ/k0g7Zi6t7kDWV0hwCgxCa2

f/ESC2MN3q3j9hfMTBhhDCsD/3+iOxtDAUlPMIH50MdK5yqagdj8V/sxaHJ5u/zw

YQunRlhB9f9QUFfhfnjRn8wjeYasMARDctCde5nbx3Pc+nRIXoB4D1Z1ZxRzR/lb

7S4i8KRr9xhommFnDv/egkx+7X1aFp1f2wN2DQ4ecGF4EAAVHwFz8H4eQgsbLsa6

7DV3BACj1cBwCf8tckWsvFtQfCP4CiBB50Ku49MU2Nfwq7durfIiePF4IIYRDZgg

kHKSfP3oUZBGJx00BujtTobERraaV7lIRIwETZao76MqGt9K1uIqw4NT/jAbi9ce

rFaOmAkaujbcB11HYIyjtkAGq9mXxaVqCC3RPWGr+fqAx/akBLQ2UGVyY29uYSBN

eVNRTCBEZXZlbG9wbWVudCBUZWFtIDxteXNxbC1kZXZAcGVyY29uYS5jb20+iGAE

ExECACAFAksm3aECGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRAcTL3NzS79

Kpk/AKCQKSEgwX9r8jR+6tAnCVpzyUFOQwCfX+fw3OAoYeFZB3eu2oT8OBTiVYu5

Ag0ESybdoRAIAKKUV8rbqlB8qwZdWlmrwQqg3o7OpoAJ53/QOIySDmqy5TmNEPLm

lHkwGqEqfbFYoTbOCEEJi2yFLg9UJCSBM/sfPaqb2jGP7fc0nZBgUBnFuA9USX72

O0PzVAF7rCnWaIz76iY+AMI6xKeRy91TxYo/yenF1nRSJ+rExwlPcHgI685GNuFG

chAExMTgbnoPx1ka1Vqbe6iza+FnJq3f4p9luGbZdSParGdlKhGqvVUJ3FLeLTqt

caOn5cN2ZsdakE07GzdSktVtdYPT5BNMKgOAxhXKy11IPLj2Z5C33iVYSXjpTelJ

b2qHvcg9XDMhmYJyE3O4AWFh2no3Jf4ypIcABA0IAJO8ms9ov6bFqFTqA0UW2gWQ

cKFN4Q6NPV6IW0rV61ONLUc0VFXvYDtwsRbUmUYkB/L/R9fHj4lRUDbGEQrLCoE+

/HyYvr2rxP94PT6Bkjk/aiCCPAKZRj5CFUKRpShfDIiow9qxtqv7yVd514Qqmjb4

eEihtcjltGAoS54+6C3lbjrHUQhLwPGqlAh8uZKzfSZq0C06kTxiEqsG6VDDYWy6

L7qaMwOqWdQtdekKiCk8w/FoovsMYED2qlWEt0i52G+0CjoRFx2zNsN3v4dWiIhk

ZSL00Mx+g3NA7pQ1Yo5Vhok034mP8L2fBLhhWaK3LG63jYvd0HLkUFhNG+xjkpeI

SQQYEQIACQUCSybdoQIbDAAKCRAcTL3NzS79KlacAJ0aAkBQapIaHNvmAhtVjLPN

wke4ZgCePe3sPPF49lBal7QaYPdjqapa1SQ=

=qcCk

—–END PGP PUBLIC KEY BLOCK—–

最后显示如下:

最后输入 yum list | grep ercona | grep 55 查看源是否配置完成

图中显示的 几个 installed状态, 因为当前的虚拟中安装mysql造成的,没去卸载就截图了,用户安装的时候应显示的Percona的.

3. 安装Mysql

运行如下命令:

yum install -y Percona-Server-test-55.x86_64

之后运行如下命令:

yum install -y Percona-Server-server-55.x86_64

最后运行:

reboot命令, 重新启动服务器系统

三. 复制虚拟机

1. 关闭虚拟机

在linux终端下,调用shutdown now 命令,关闭linux虚拟机

2. Clone linux虚拟机

3. 启动clone后虚拟机, 检查虚拟机的ip地址, 有了这个ip地址才好进授权(msyql同步帐号的授权)工作

四. 配置mysql主从环境

1. Mysql主从服务器环境

l Mysql主服务器相关配置

[root@mysql01 ~]# hostname

mysql01

[root@mysql01 ~]# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:0C:29:CC:9B:AA

inet addr:192.168.2.66  Bcast:192.168.2.255  Mask:255.255.255.0

…………..

[root@mysql01 ~]#

l 从服务器配置

[root@mysql02 ~]# hostname

mysql02

[root@mysql02 ~]# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:0C:29:BC:22:5B

inet addr:192.168.2.97  Bcast:192.168.2.255  Mask:255.255.255.0

……

[root@mysql02 ~]#

2. 在主服务器配置同步帐号

首先如下图登录mysql服务器

在命令提示符中输入下面命令, 注意帐号:repl, ip地址:2.97, 密码:123456, 注意授权全部的 数据库

grant replication slave on *.* to ‘repl’@’192.168.2.97′ identified by  ’123456′;(注意:去除前面的空格)

输入完成后如下图

要注意: 要在mysql01就是做master的机器上执行

Sql语句中要去除前面的多余空格(里面有可能有中文空格等)

执行完毕一般需要同 flush语句进行处理, 但我们稍后要重新启动mysql服务器因此就不需要了, 直接输入 \q; 退出 mysql程序.

3. 生成 mysql的配置文件

l 执行搜索命令,查找mysql 配置文件模板

find / -name *.cnf 最后显示如下:

注意图中绿色区域

l 生成配置文件

输入如下命令:

# cat /usr/share/doc/Percona-Server-server-55-5.5.28/my-large.cnf > /etc/my.cnf

l 编辑配置文件

vi /etc/my.cnf 文件

注意在中的[mysqld]配置区域中, 的绿色区域附近添加粉色区域的 文本, 表示不同步 mysql数据库

binlog-ignore-db=mysql

l 重新启动mysql服务

执行service mysql restart 命令重新启动mysql服务器

4. 配置从服务器

开始从服务器的虚拟机, 通过linux终端连接到从服务器的虚拟机,然后按照下面步骤完成相应工作.

l 生成配置文件

# cat /usr/share/doc/Percona-Server-server-55-5.5.28/my-large.cnf > /etc/my.cnf

vi /etc/my.cnf 文件, 添加如下代码server-id       = 2

l 重新启动mysql服务

[root@mysql02 ~]# service mysql restart

Shutting down MySQL (Percona Server)…[  OK  ]

Starting MySQL (Percona Server)..[  OK  ]

l 执行修改主从的sql语句

首先如上图登录 mysql的客户端中, 然后执行下面的sql语句,来设置从那里进行数据的同步操作

CHANGE MASTER TO MASTER_HOST=’192.168.2.66′,  MASTER_PORT=3306, MASTER_USER=’repl’,  MASTER_PASSWORD=’123456′, MASTER_CONNECT_RETRY=2;

l 开始slave服务

在mysql的sql界面中执行

start slave;

开始mysql的 slave功能

l 显示工作状态

在mysql的sql界面中执行如下语句

show slave status\G;

显示情况如下:

l 查看从服务器目录文件

如上图进入相关mysql的目录,检查相关文件注意红色区域文件及绿色区域文件

5. 主数据库执行创建数据库语句

mysql> CREATE DATABASE `mytest` CHARACTER SET ‘utf8′ COLLATE ‘utf8_general_ci’;

Query OK, 1 row affected (0.00 sec)

6. 从库中执行显示数据库的命令

show databases;

显示情况如上, 已经将新创举的数据库从主库同步到从库了.

相关文章

    • Haproxy安装和动态配置更改测试
      本文主要描述haproxy的安装及简单配置过程。并且应用这个简单的配置做mysql的负载均衡,同时haproxy的配置文件发生变化时我们如何重新启动haproxy程序,并且确定haproxy程序重新启...
    • 基于数据库的权限系统的设计
      这一天将讲述一个基本的基于数据库的权限管理系统的设计,在这一天的课程的最后将讲述“左右值无限分类实现算法”如何来优化“系统菜单”的结构而告终。今天的内容和前几天的基础框架是一样的它们都属于基础知识,在...
    • MySQL 数据库的备份和恢复
      本文讨论 MySQL 的备份和恢复机制,以及如何维护数据表,包括最主要的两种表类型:MyISAM 和 Innodb,文中设计的 MySQL 版本为 5.0.22。 目前 MySQL 支持的免费备份工...
    • linux centos下配置mysql主从同步的步骤
      来源:互联网 linux centos下配置mysql主从同步的步骤: 一、主机环境 主机: master操作系统:centos 5.3 IP:192.168.1....
    • MySQL主从同步加速 Transfer– FAQ
      来源:互联网 Q: Transfer是什么 A: 是一个解决MySQL原生主从同步延迟的方案。 Transfer本身是一个在MySQL源码上打的patch,可以用于当Slave,也可以用于当第三方...

http://www.iigrowing.cn/mysql-zhu-cong-tong-bu-shi-yan.html

MySQL多线程同步-Transfer使用测试的更多相关文章

  1. Mysql多线程性能测试工具sysbench 安装、使用和测试

    From:http://www.cnblogs.com/zhoujinyi/archive/2013/04/19/3029134.html 摘要:      sysbench是一个开源的.模块化的.跨 ...

  2. centos7下mysql半同步复制原理安装测试详解

    原理简介: 在MySQL5.5之前,MySQL的复制其实都是异步复制(见下图),主库和从库的数据之间存在一定的延迟,这样存在一个隐患:当在主库上写入一个事务并提交成功,而从库尚未得到主库推送的BinL ...

  3. No.1.测试Synchronized加锁String字符串后的多线程同步状况

    测试目的描述 Synchronized关键字锁定String字符串可能会带来严重的后果, 尽量不要使用 synchronized(String a) 因为JVM中,因为字符串常量池具有缓冲功能! 接下 ...

  4. MySQL系列详解八:MySQL多线程复制演示-技术流ken

    前言 Mysql 采用多线程进行复制是从 Mysql 5.6 开始支持的内容,但是 5.6 版本下有缺陷,虽然支持多线程,但是每个数据库只能一个线程,也就是说如果我们只有一个数据库,则主从复制时也只有 ...

  5. c#中多线程同步Lock(锁)的研究以及跨线程UI的操作

    本文只针对C#中,多线程同步所用到的锁(lock)作为研究对象.由于想更直观的显示结果,所以,在做demo的时候,就把多线程通过事件操作UI的代码也写了出来,留作备忘和分享吧. 其实多线程的同步,使用 ...

  6. MySQL半同步复制

    从MySQL5.5开始,MySQL以插件的形式支持半同步复制.如何理解半同步呢?首先我们来看看异步,全同步的概念 异步复制(Asynchronous replication) MySQL默认的复制即是 ...

  7. C#多线程同步事件及等待句柄AutoResetEvent 和 ManualResetEvent

    最近捣鼓了一下多线程的同步问题,发现其实C#关于多线程同步事件处理还是很灵活,这里主要写一下,自己测试的一些代码,涉及到了AutoResetEvent 和 ManualResetEvent,当然还有也 ...

  8. MySQL主从同步配置

    如果主从配置之前安装了云平台,请停止云平台后在进行mysql主从配置. 1. 登录master数据库,检查数据库端口防火墙设置,允许远程客户连接,如果没有,执行以下操作. 执行命令:iptables  ...

  9. php多线程抓取信息测试例子

    php多线程抓取信息测试例子 PHP 5.3 以上版本,使用pthreads PHP扩展,可以使PHP真正地支持多线程.多线程在处理重复性的循环任务,能够大大缩短程序执行时间. PHP扩展下载:htt ...

随机推荐

  1. oracle视图总结(创建、查询、改动、删除等)

    视图定义: - -视图是一种虚表. - -视图建立在已有表的基础上, 视图赖以建立的这些表称为基表. - -向视图提供数据内容的语句为 SELECT 语句, 能够将视图理解为存储起来的 SELECT ...

  2. 关于如何在你的Web项目中实现对空间数据访问权限的控制(一)

    Wednesday, 23 JUNE 近来一直在研究关于如何在我的WebGIS项目中实现对空间数据(已发布在GeoServer上)进行权限管理的问题.虽然到目前为止没能找到一个完美的解决方案,但通过这 ...

  3. 神经网络可以拟合任意函数的视觉证明A visual proof that neural nets can compute any function

    One of the most striking facts about neural networks is that they can compute any function at all. T ...

  4. OpenCV图像平滑处理

    图像平滑处理 目标 本教程教您怎样使用各种线性滤波器对图像进行平滑处理,相关OpenCV函数如下: blur GaussianBlur medianBlur bilateralFilter 原理 No ...

  5. Python学习(四)数据结构(概要)

    Python 数据结构 本章介绍 Python 主要的 built-type(内建数据类型),包括如下: Numeric types          int float Text Sequence ...

  6. C/C++调用java---JNI常用函数

    DefineClass         jclass  DefineClass(JNIEnv *env, jobject loader,  const jbyte *buf, jsize bufLen ...

  7. c#如何操作ppt的播放 【转】

    C#控制ppt的代码 包括打开ppt文件.读取幻灯页,插入幻灯片,自动播放等 using System.Collections.Generic; using System.Linq; using Sy ...

  8. Git使用sublime_text作用默认编辑器

    Git使用的是Vim来作用默认的编辑器,但一直都用不好这个编辑器,所以打算把他换成sublime_text 使用windows默认的记事本 git config --global core.edito ...

  9. RS交叉表按照预定的节点成员排序

    需求:RS一个交叉表,显示所有(科室-职称-医生)的就诊量,但是针对同一个科室来说,该科室的主任执行报表首先需要第一个看到的是主任医师级别的工作量 效果如图: 得到这个需求后感觉很简单,就是根据职称排 ...

  10. 用C#读取图片的EXIF信息的方法

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Dr ...