Archive for 三月 2011

mysql培训课程详细列表

为了提高开发人员和部门内部MySQL使用的技能和深度,我们特别制作了一些开发培训的计划,下面是一些主题

mysql应用开发培训
mysql安装的三种方式:rpm安装,tar.gz安装,configure安装
mysql 数据类型和函数,字节数,最大最小值,
mysql 适用SQL和不适用SQL。哪些SQL应该杜绝,哪些SQL应该避免,哪些在oracle适用但是尽量避免在MySQL中使用。
mysql 索引,约束,索引是否越多越好,覆盖索引,主键索引。
mysql 自定义函数以及procedure。delimiter,游标,调用,
mysql 视图,子查询,连接,union。不使用视图的原因,子查询的弊端,替换方案,内联接,外联接,union all和union的区别,使用场景。
mysql 分页limit,以及简单的实现原理
mysql 存储引擎介绍和比较。至少包括innodb,MyISAM,csv,memory,federated,ndb

mysql管理维护培训
mysql 备份和恢复。包括物理冷备;mysqldump; select into outfile;xtrabackup备份,优缺点,限制和使用场景。
mysql 复制搭建。步骤:备份并恢复数据;获得主机备份位置的binlog;change master
mysql binlog介绍。三种格式,分别的优缺点,statement复制的安全问题,row方式下目前我们遇到的几个问题。
mysql show processlist中,各个查询的状态的含义:query,NULL,executing,update等等。
mysql show engine innodb status介绍。
mysql show slave status输出详细解释。包括master.info,relay-log.info,logbin.index,relay-log.index, logbin.0001,relay-log.0001解释,slave io和slave sql 的不同状态含义
mysql 用户权限介绍。localhost,127.0.0.1,%的不同点。限制IP,限制数据库,限制表,限制字段,数据库或者表等的单字匹配以及多字匹配。
mysql 工具介绍:目前我们使用比较频繁的工具:mysql;mysqld_safe;mysqladmin;mysqlcheck;mysql_install_db;mysqlbinlog;mysqldump;mysqld_multi;以及第三方工具innotop;maatkit;mysqlsla
mysql my.cnf介绍。作用,mysql默认的位置,组的概念,工具特定参数介绍。
mysql 多实例概念和管理
mysql information_schema介绍,peconar新增信息介绍。
mysql ’mysql‘schema介绍,对应表信息。
mysql cluster介绍,性能问题,内存问题。

mysql高级培训
mysql configure安装的配置参数
mysql 源码框架和文件介绍
mysql binlog格式,二进制解释。文件头,event分类,二进制格式。
innodb 物理文件格式介绍以及数据恢复方法,实用案例分析,最终导出数据展示。
innodb 锁介绍
mysql 参数介绍。
mysql 状态变量介绍.目前在性能视图中的变量有哪些
mysql 大事务情况下,show slave status锁分析,解决方案。
mysql 唯一约束和普通索引在加锁上的区别。

sql培训单独列出,不包含在这些内容里面

heartbeat替换集群中的一台主机

今天完成了替换双master其中一台主机的任务。特将具体过程记录下来以供以后参考。
背景描述:
a,b互为主备,a提供应用访问。c是a的备机,画一个最挫的图如下
a<->b
|
c
现在,我想用c替换掉b。
a和b是用heartbeat来做HA的,要求在替换主机过程中,应用不能停,对应用必须要透明。
方案:
我们采用修改b的IP,并停掉b。然后把c的hostname,IP修改为b的方法,顶替b来避免对应用的影响
1、停止主机a的slave。这个是为了避免c替换掉b的IP起来的时候,a从错误的位置开始复制binlog。因为b和c的binlog不可能为同一个位置
2、b修改Ip并停机。修改/etc/sysconfig/network-scripts/ifcfg-bond0中的IP;/etc/init.d/network restart重启网络;poweroff关机
3、用c顶替b。
a)修改主机名。利用hostname命令设置主机名;修改/etc/hosts中的节点名称;修改/etc/sysconfig/network中的主机名
b)修改IP.同2.
c)修改heartbeat。这里是比较关键的地方,经过详细测试得出:
一:如果是全新安装的机器,需要从主机a中拷贝ha.cf,authkey,cib.xml以及通过crm_uuid -w 生成正确的uuid
二:如果是从a拷贝过来的heartbeat,那么需要删除(我的安装目录为/usr/heartbeat):
/usr/heartbeat/var/lib/heartbeat/hostcache
/usr/heartbeat/var/lib/heartbeat/hb_uuid
/usr/heartbeat/var/lib/heartbeat/hb_generation
hostcache为缓存主备机节点以及uuid的地方,
hb_uuid为本节点的uuid,
hb_generation为主备机协商时握手的数值。
hb_uuid和hb_generation如果顶替的时候跟之前的节点不一样,那么主机就会报:heartbeat[11165]: 2011/03/21_18:19:40 ERROR: should_drop_message: attempted replay attack [jyl-idle-db3b]? [gen = 1245825415, curgen = 1245825416]错误。
hb_uuid需要用crm_uuid -w 来生成,不能由heartbeat默认生成。从主机a的/usr/heartbeat/var/lib/heartbeat/hostcache获得b机器的uuid,然后crm_uuid -w uuid生成。
具体的信息可以参照下面的介绍:
4.5.2. Heartbeat
The seven-step guide to replacing an existing cluster node:
Make sure the old node is completely stopped
Give the new machine the same hostname as the old one
Go to an active cluster node and look up the UUID for the old node in /var/lib/heartbeat/hostcache
Install the cluster software
Copy ha.cf and authkeys to the new node
On the new node, populate it’s UUID using crm_uuid -w and the UUID from step 2
Start the new cluster node
http://www.clusterlabs.org/doc/en-US/Pacemaker/1.0/html/Pacemaker_Explained/s-replace-heartbeat.html
4、主机a,change master 搭建c到a的复制(这里可以随意的在c上show master status获得位置,因为c是备机,它自己没有应用访问生成binlog)
5、启用c机器的heartbeat和MySQL。检查crm_resource的输出
may your success

dell dset工具收集日志以及dell bios升级

上周对最核心的中文站主机进行了bios升级,其中涉及到dell相关日志的收集以及bios升级的办法,这里记录下来,以便以后如果还有类似需要,进行查阅。
首先,dell 的dset工具使用和介绍本身官网上就有:http://support1.ap.dell.com/cn/zh/forum/thread.asp?fid=20&tid=99848&type=email_tool。这个工具可以用来收集系统驱动,服务,网络设置等等,同时又包括CPU,memory, ESM log, BIOS/firmware versions and system health (fan/voltage levels). ,它也收集系统存储信息,比如:RAID卡,硬盘等。运行方式没有找到非交互式的办法,估计只好解压bin包来搞了。运行这个文件以后会在指定的目录或者在用户根目录下产生一个压缩文件。解压文件需要密码,偷偷的告诉你,就是:dell。解压的文件夹里面dsetreport.hta就是一个网页文件,看起来还是比较爽的。
然后:我们DELL R710机器的bios下载地址http://ftp.us.dell.com/bios/PER710_BIOS_LX_2.3.12.BIN
另外找dell的工程师要了几个工具的下载地址和使用说明:
OSMA软件下载(windows版):http://ftp.us.dell.com/sysman/OM-SrvAdmin-Dell-Web-WIN-6.4.0-1266_A00.18.exe
OSMA软件下载(Linux版):http://ftp.us.dell.com/sysman/OM_6.1.0_ManNode_A00.tar.gz
ITA软件下载:http://ftp.us.dell.com/sysman/OM-ITAssistant-Dell-Web-WIN-6.4.0-1266_A00.11.exe
ITA使用说明:http://support1.ap.dell.com/cn/zh/forum/thread.asp?fid=20&tid=163390

利用MegaCli和smartCtl工具获得ssd盘使用情况

之前详细询问了intel工程师关于怎么获得ssd盘使用情况的信息,并在杭州核心集群offer获得使用了一年多的ssd盘机器信息,目前该批机器ssd盘基本上都只耗一滴血,非常健康。
这里简单描述一下,怎么利用MegaCli和smartCtl获得ssd盘使用情况
首先,由于我们的服务器是做了raid的,所以需要用MegaCli获得各个适配器下的各个磁盘的信息。(目前我们的MySQL机器基本只有一个适配器)MegaCli有很多参数,具体的用法就不详细介绍了。
这里我们用MegaCli -PDList –aALL获得所有的适配器的物理磁盘信息。
例如:
Enclosure Device ID: 32
Slot Number: 4
Device Id: 4
Sequence Number: 2
Media Error Count: 0
Other Error Count: 0
Predictive Failure Count: 0
Last Predictive Failure Event Seq Number: 0
Raw Size: 122880MB [0xf000000 Sectors]
Non Coerced Size: 122368MB [0xef00000 Sectors]
Coerced Size: 122368MB [0xef00000 Sectors]
Firmware state: Online
SAS Address(0): 0x1221000004000000
Connected Port Number: 4(path0)
Inquiry Data: ATA     INTEL SSDSA2M16002HACVPO944400FM160AGN
这个就是其中一块物理磁盘的信息。
我们可以看到它的适配器编号(Enclosure Device ID: 32),设备编号(Device Id: 4),磁盘大小(Raw Size: 122880MB [0xf000000 Sectors]),连接口(Connected Port Number: 5(path0)),上线状态(Firmware state: Online。也有可能是hotspare)以及磁盘信息(Inquiry Data: ATA     INTEL SSDSA2M16002HACVPO944400FM160AGN,intel的ssd盘)
然后,通过smartctl我们可以获得对应磁盘的具体信息。smartctl是smartmontools工具包中的其中一个工具。
注意:这里smartctl的版本需要比较新,比如5.1.40已上
smartctl -a -d megaraid,4 /dev/sdb
这里megaraid,4的4表示上面MegaCli输出中的Device Id: 4,也就是说我们希望读取物理磁盘4的磁盘信息。
ssd盘的输出信息和sas盘的输出信息不同,特别是在
Vendor Specific SMART Attributes with Thresholds:段。
该段有很多ssd盘独有的参数。具体的参数请参考intel的pdf文件。
这里截取杭州offer集群的一台机器信息作为参考:
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
3 Spin_Up_Time            0x0000   100   000   000    Old_age   Offline      –       0
4 Start_Stop_Count        0x0000   100   000   000    Old_age   Offline      –       0
5 Reallocated_Sector_Ct   0x0002   100   100   000    Old_age   Always       –       0
9 Power_On_Hours          0x0002   100   100   000    Old_age   Always       –       10362
12 Power_Cycle_Count       0x0002   100   100   000    Old_age   Always       –       62
192 Unsafe_Shutdown_Count   0x0002   100   100   000    Old_age   Always       –       44
232 Available_Reservd_Space 0x0003   100   100   010    Pre-fail  Always       –       0
233 Media_Wearout_Indicator 0x0002   099   099   000    Old_age   Always       –       0
225 Host_Writes_32MiB       0x0000   200   200   000    Old_age   Offline      –       1284966
226 Intel_Internal          0x0002   255   000   000    Old_age   Always       –       0
227 Intel_Internal          0x0002   000   000   000    Old_age   Always       –       0
228 Intel_Internal          0x0002   000   000   000    Old_age   Always       –       0
其中我们比较关注的有以下四点:
1、Media_Wearout_Indicator:    使用耗费,100为没有任何耗费; 表示SSD上NAND的擦写次数的程度,初始值为100,随着擦写次数的增加,开始线性递减,递减速度按照擦写次数从0到最大的比例。一旦这个值降低到 1,就不再降了,同时表示SSD上面已经有NAND的擦写次数到达了最大次数。这个时候建议需要备份数据,以及更换SSD。
上面的机器为099,按照100滴血算,目前只耗了1滴血
2、Reallocated_Sector_Ct: 出厂后产生的坏块个数, 初始值为100,如果有坏块,从1开始增加,每4个坏块增加1
这里offer的机器还没有任何坏块
3、Host_Writes_32MiB: 已写32MiB, 每写入65536个扇区raw value增加1。这个扇区还是个数量单位,512字节
比如:这块盘就是 1284966 * 65536 * 512 = 40155.1875 GB
注意到每个机器都有一块盘写的比较少,这块盘就是hotspare盘。
每台机器我们有7块ssd盘。其中6块盘做的raid 5,第7块盘做的hotspare。
4、Available_Reservd_Space: SSD上剩余的保留空间, 初始值为100,表示100%,阀值为10,递减到10表示保留空间已经不能再减少
offer的机器基本都没有什么降低。
这样我们就获得了ssd盘的使用情况。
这里我再把林总的计算ssd盘还能用多久的方法摘录如下:
从这些值还可以推算一些东西:
offer集群的SSD单块盘累计写入量大约是40T  VS offer集群基本上都在99-100,磨损的程度非常低(初始值是100)。
Intel的均匀磨损算法控制得很好,基本上保证了磨损程度是平均的。
假设SSD单盘实际100GB(64GB+保留容量)大小,写入量40TB的话,就是每块单盘经历了40TB/100GB=400次相当于全盘写一遍,去除第一次空盘时写入的量,还有399次应该是“擦除”-“写入”的过程,为计算简便,我们就认为已经擦写了400次了。再考虑磨损率最大仅有1%,则我们的SSD盘厂商保证可擦写次数>=400/0.01=40000次(这个数字也是非常靠谱的),于是可以推算出:
1.         咱们的盘至少还可以写入(40000-400)*100GB=3960TB的数据
2.         上线到现在超过半年了,按已有的使用率(半年写入40TB),还可以用3960TB/40/2=49.5年
什么概念呢?不出其他的问题,理论上offer集群的SSD盘极限可用50年,当然我们不会用那么久,也不能等磨损率99%了才去考虑换盘,但是用到磨损率50%也可25年之久,再考虑材料性能的衰减,至少用上3、5年肯定是没有问题的