楼主: jinguanding

[原创] MySQL_DBA资料整理

[复制链接]
论坛徽章:
0
81#
发表于 2008-4-18 11:47 | 只看该作者
还是有不少东西,刚刚对不起了

使用道具 举报

回复
论坛徽章:
0
82#
发表于 2008-4-18 15:11 | 只看该作者
先顶了再说,感谢版主能分享宝贵的经验啊。

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:282013年新春福章
日期:2013-02-25 14:51:24ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042011新春纪念徽章
日期:2011-01-04 10:35:172010广州亚运会纪念徽章:马术
日期:2010-11-22 15:29:06ITPUB9周年纪念徽章
日期:2010-10-08 09:31:212010系统架构师大会纪念
日期:2010-09-03 16:39:572010年世界杯参赛球队:希腊
日期:2010-06-22 12:15:492010数据库技术大会纪念徽章
日期:2010-05-13 09:34:232010新春纪念徽章
日期:2010-03-01 11:06:13
83#
发表于 2008-4-24 00:08 | 只看该作者
关注

使用道具 举报

回复
论坛徽章:
52
2015年新春福章
日期:2015-03-06 11:57:312012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:32:552012新春纪念徽章
日期:2012-02-07 09:59:35
84#
 楼主| 发表于 2008-4-30 15:53 | 只看该作者
原帖由 jinguanding 于 2007-12-10 17:30 发表
前言:
        镜像机制是一种能够让运行在不同计算机上的两个或更多个MySQL服务器保持同步变化的机制。目前MySQL只支持“主-从”镜像关系。即只有一台主控制系统(可读写),所有的数据修改操作都必须在这台MySQL 服务器上进行;有一台或多台从属系统(只读),它们有着与主控系统完全一样的数据,主控系统上的数据变化在经过一个短暂的延迟后也将会发生在它们身上。
        “主-从”镜像关系中的数据同步是通过主控系统的二进制日志文件实现的;主控系统把自己执行过的SQL命令记载到自己的二进制日志文件里,从属系统则通过从主控系统的二进制日志文件读出SQL命令,并加以执行的办法来同步它们自己的数据库数据。“主-从”镜像机制不要求主控与从属系统都必须使用同一种操作系统。
        MySQL复制功能在MySQL5.0以上版本比较稳定、而且性能也比较好。从其他用户测试与MySQL AB公司介绍可以获知,本人曾恶意地使用Update语句修改了一张表的所有数据(数据量:17万多条,主从机器都不在同一网段,主机-外网,从机为虚拟机(内网)),几乎没有感觉到时延。
        另外,若企业使用MySQL复制特性,主要是出于安全性与速度方面的考虑,若读操作是导致数据库系统变慢的主要原因,建议大家还是先进行SQL优化与服务器配置优化,或增加内存与CPU。至于安全性方面,大家关注的可能是担心硬盘损坏等造成数据丢失,这种情况可以考虑使用RAID系统进行冗余存储,即硬盘数据建立镜像。
建议大家不要首先就考虑采用MySQL的镜像机制,投入的资金与取得的实际效果并不是最优的(引用大师的话:Michael Kofler)。
那什么情况下可以考虑采用镜像机制?我个人认为至少是这几点的结合体(因为我们必须为老板省钱且做好事情,才可能为公司创造更多价值,才可能发更多奖金,嘿嘿!)。
1>        主要是读操作影响数据库服务器性能,并不是SQL语句性能差,也不是程序性能差与服务器配置等的问题,确实访问量太多(主要指网站类型的,发财了!),使用MySQL群集解决负载的问题,公司不想投入那么多资金。这个是时候你可以考虑使用MySQL复制进行折中。
2>        需要进行在线分析处理(OLAP),但是数据库又要影响大量的事务处理(OLTP),,并且是需要实时数据分析,而且在线事务分析处理后的数据对公司的经营决策非常重要,这个时候你可以考虑用一台服务器作为从服务器(比较适合游戏公司)。
3>        为了数据的安全性、备份、用于查询操作。因为使用RAID只可能解决因硬盘损坏造成的数据损失,而不能防止操作系统崩溃、电源故障或其他类似意外。出现问题,可以立即把从机升级为主服务器,若限制了从机只能读的话,需要修改(还有权限信息是否也镜像过来了或是否一致)。若限制从机不能修改,则建议不要把mysql数据库镜像过来,还有就是可以把一些查询操作放在从机上执行,以及数据库的备份操作也可以放在从机上进行(比较适合游戏公司与中小型企业)。
金融以及对数据安全、影响性能要求高的企业或国家部门,肯定会采用群集的!以上是本人根据学习与实际工作写的东东,只是我个人的观点噢,是否合理还有待大家的实际检验,有不正确的地方还请大家指定。下面介绍复制的过程。
一、测试环境
        主机:
                主控机操作系统:FreeBSD
                IP:10.21.0.5
                MySQL版本:5.0.27
               
从属机操作系统:Linux AS3.0(安装在虚拟机上)
                IP:192.168.0.229
                MySQL版本:5.0.27
                                                                                                                                                                       
二、主控机的my.cnf文件与复制相关的配置
[mysqld]
log_bin = ccxy_db
binlog-do-db = ccxyaccount
binlog-ignore-db = mysql,ccxydata_lz,ccxydata_ws,ccxydata_wy,test,ccxydata

三、从属机的my.cnf文件与复制相关的配置
[mysqld]
server-id            = 2
master-user          = eugene
master-password      = 2006eugene
master-port          = 3306
master-connect-retry = 120
read-only            = 1
relay-log-purge      = 1
replicate-do-db      = ccxyaccount
replicate-ignore-db  = mysql,test
report-host          = eugene
slave-skip-errors    = all
#master-log-file      = ccxy_db.000008

在主控服务器上进行权限设置:
grant replication slave on *.* to 'eugene'@'192.168.0.229' identified by '2006eugene'
对需要进行镜像的数据库进行备份,当然你也可以不备份直接使用通过镜像来完成(不建议使用这种方法)。由于我的数据库存储引擎为MyISAM,所以使用我的备份脚本接可以完成备份与打包并且传送到指定的服务器上。然后进行解压缩等相关操作。
先在主控服务器上执行:

mysql> show master  status;
+----------------+----------+--------------+---------------------------------------------------------+
| File           | Position | Binlog_Do_DB | Binlog_Ignore_DB                                        |
+----------------+----------+--------------+---------------------------------------------------------+
| ccxy_db.000008 |       98 | ccxyaccount  | mysql,ccxydata_lz,ccxydata_ws,ccxydata_wy,test,ccxydata |
+----------------+----------+--------------+---------------------------------------------------------+
1 row in set (0.00 sec)

使用了master-log-file设置选项,就无法启动从属服务器上的mysqld,提示找不到日志文件。注释掉后就可以启动mysqld(加上master-log-pos也不行)。进入mysql命令模式下执行:
mysql> slave start;
ERROR 1200 (HY000): The server is not configured as slave; fix in config file or with CHANGE MASTER TO
出现错误,然后再执行Change master语句就可以解决:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
在从属服务器上执行:
mysql> change master to master_host='10.21.0.3',master_user='eugene',master_password='2006eugene',master_log_file='ccxy_db.000008' ,master_log_pos=98;
Query OK, 0 rows affected (0.01 sec)

接着执行:
mysql> slave start;
Query OK, 0 rows affected (0.01 sec)
就可以解决,至于为什么会出现这样的问题,目前我无法解释(需要等待我找出更多证据后再告诉大家)。

在从属服务器上也可以设置某张或多张表的数据不进行复制,只要在my.cnf 文件中添加:
replicate-wild-ignore-table=dbname.tablename
也可以限制不复制某个数据库:
replicate- ignore-db =dbname
注意:
        在主服务器上设置了binlog-ignore-db 就会把这些被列出来的数据库任何更改都不会写入二进制日志文件中的,若需要保留这些更改日志,请不要在主服务器上设置这个选项。而是在从属服务器的my.cnf文件中设置需要复制的数据库与不复制的数据库。
        另外:使用复制功能应该根据用途不同与实际情况,考虑服务器之间的物理位置关系(指是否在同一域或同网段内等),因为网络传送会影响到你复制的速度,从而可能抵消一部分你为了提供系统响应的速度。




解决master-log-file与master-log-pos  在my.cnf文件中配置就会出错的原因:
因为MySQL AB公司打算在MySQL-5.2版本中不再支持在my.cnf文件中配置这两个参数

所以只要在my.cnf中不配置这两个参数就能在启动mysqld的时候启动slave
参考配置:
server-id                       = 2

#please execute  `show master logs` to record position and file
master_host                     = 192.168.0.240

master_user                     = billingcenter
master-password                 = billingcenter
master_port                     = 3306

#replicate-do-db    = dbname
replicate-do-table              = billingcenter.accountpoint
replicate-do-table              = billingcenter.operator

replicate-wild-do-table         = billingcenter.addpointlog%
replicate-wild-do-table         = billingcenter.subtractpointlog%

read-only                       = 1
log-slave-updates

master-connect-retry            = 60
relay-log-purge                 = 1
slave-skip-errors               = all

innodb_flush_log_at_trx_commit  = 2
sync_binlog                     = 0

所以大家在以后的配置中不要使用这两个参数了,但是change master to语句会继续支持。


再次补充下:
复制的时候,一定要确保Master/Slave一致性,
加如在master中 account表中有条记录
id       money
1007  100

而slave没有该记录(备注:在进行Insert的时候,Slave出问题了,导致不同步)
若再执行update或delete 该记录值是不会有任何动作到slave 中的。
所以在复制出现问题后,必须再次保持两边数据库的数据同步,然后再开放服务给Client

[ 本帖最后由 jinguanding 于 2008-5-5 16:22 编辑 ]

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:282013年新春福章
日期:2013-02-25 14:51:24ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042011新春纪念徽章
日期:2011-01-04 10:35:172010广州亚运会纪念徽章:马术
日期:2010-11-22 15:29:06ITPUB9周年纪念徽章
日期:2010-10-08 09:31:212010系统架构师大会纪念
日期:2010-09-03 16:39:572010年世界杯参赛球队:希腊
日期:2010-06-22 12:15:492010数据库技术大会纪念徽章
日期:2010-05-13 09:34:232010新春纪念徽章
日期:2010-03-01 11:06:13
85#
发表于 2008-5-3 22:52 | 只看该作者
学习中

使用道具 举报

回复
论坛徽章:
40
生肖徽章2007版:马
日期:2008-04-07 19:43:48管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-02-13 15:08:092012新春纪念徽章
日期:2012-02-13 15:08:092012新春纪念徽章
日期:2012-02-13 15:08:092012新春纪念徽章
日期:2012-02-13 15:08:092012新春纪念徽章
日期:2012-02-13 15:08:09马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14
86#
发表于 2008-5-5 11:22 | 只看该作者
我贴了一篇简单的异常处理,兄弟去提提意见

http://blog.chinaunix.net/u/29134/showart_673456.html

使用道具 举报

回复
论坛徽章:
1
87#
发表于 2008-5-8 14:29 | 只看该作者
顶一下

使用道具 举报

回复
论坛徽章:
0
88#
发表于 2008-5-11 23:09 | 只看该作者

太好了

非常感谢有如此多如此好的经验分享。

使用道具 举报

回复
论坛徽章:
52
2015年新春福章
日期:2015-03-06 11:57:312012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:32:552012新春纪念徽章
日期:2012-02-07 09:59:35
89#
 楼主| 发表于 2008-5-12 21:01 | 只看该作者
见不少friends问日志方面的东西,在此把官方的 原话贴出来(毕竟我个人的理解未必是最准确的)



对非事务表的更新执行完毕后立即保存到二进制日志中。对于事务表,例如BDB或InnoDB表,所有更改表的更新(UPDATE、DELETE或INSERT) 被缓存起来,直到服务器接收到COMMIT语句。在该点,执行完COMMIT之前,mysqld将整个事务写入二进制日志。当处理事务的线程启动时,它为缓冲查询分配binlog_cache_size大小的内存。如果语句大于该值,线程则打开临时文件来保存事务。线程结束后临时文件被删除。

Binlog_cache_use状态变量显示了使用该缓冲区(也可能是临时文件)保存语句的事务的数量。Binlog_cache_disk_use状态变量显示了这些事务中实际上有多少必须使用临时文件。这两个变量可以用于将binlog_cache_size调节到足够大的值,以避免使用临时文件。

max_binlog_cache_size(默认4GB)可以用来限制用来缓存多语句事务的缓冲区总大小。如果某个事务大于该值,将会失败并 回滚。

如果你正使用更新日志或二进制日志,当使用CREATE ... SELECT or INSERT ... SELECT时,并行插入被转换为普通插入。这样通过在备份时使用日志可以确保重新创建表的备份。

请注意MySQL 5.1值的二进制日志格式与以前版本的MySQL不同,因为复制改进了。参见6.5节,“不同MySQL版本之间的复制兼容性”。

默认情况下,并不是每次写入时都将二进制日志与硬盘同步。因此如果操作系统或机器(不仅仅是MySQL服务器)崩溃,有可能二进制日志中最后的语句丢失了。要想防止这种情况,你可以使用sync_binlog全局变量(1是最安全的值,但也是最慢的),使二进制日志在每N次二进制日志写入后与硬盘同步。参见5.3.3节,“服务器系统变量”。即使sync_binlog设置为1,出现崩溃时,也有可能表内容和二进制日志内容之间存在不一致性。例如,如果使用InnoDB表,MySQL服务器处理COMMIT语句,它将整个事务写入二进制日志并将事务提交到InnoDB中。如果在两次操作之间出现崩溃,重启时,事务被InnoDB回滚,但仍然存在二进制日志中。可以用--innodb-safe-binlog选项解决该问题,可以增加InnoDB表内容和二进制日志之间的一致性。(注释:在MySQL 5.1中不需要--innodb-safe-binlog;由于引入了XA事务支持,该选项作废了)。

该选项可以提供更大程度的安全,还应对MySQL服务器进行配置,使每个事务的二进制日志(sync_binlog =1)和(默认情况为真)InnoDB日志与硬盘同步。该选项的效果是崩溃后重启时,在滚回事务后,MySQL服务器从二进制日志剪切 回滚的InnoDB事务。这样可以确保二进制日志反馈InnoDB表的确切数据等,并使从服务器保持与主服务器保持同步(不接收 回滚的语句)。

请注意即使MySQL服务器更新其它存储引擎而不是InnoDB,也可以使用--innodb-safe-binlog。在InnoDB崩溃恢复时,只从二进制日志中删除影响InnoDB表的语句/事务。如果崩溃恢复时MySQL服务器发现二进制日志变短了(即至少缺少一个成功提交的InnoDB事务),如果sync_binlog =1并且硬盘/文件系统的确能根据需要进行同步(有些不需要)则不会发生,则输出错误消息 ("二进制日志<名>比期望的要小")。在这种情况下,二进制日志不准确,复制应从主服务器的数据快照开始。

写入二进制日志文件和二进制日志索引文件的方法与写入MyISAM表相同。参见A.4.3节,“MySQL处理磁盘满的方式”。

使用道具 举报

回复
论坛徽章:
273
生肖徽章2007版:猪
日期:2008-09-27 09:35:45明尼苏达森林狼
日期:2009-01-12 14:15:09生肖徽章2007版:猪
日期:2009-01-21 16:30:59布鲁克林篮网
日期:2009-03-03 14:42:32圣安东尼奥马刺
日期:2009-03-03 14:44:41生肖徽章2007版:鸡
日期:2009-03-03 21:45:52生肖徽章2007版:牛
日期:2009-03-09 14:03:42生肖徽章2007版:猪
日期:2009-03-10 21:37:00生肖徽章2007版:羊
日期:2009-03-16 10:17:11生肖徽章2007版:虎
日期:2009-03-24 21:26:52
90#
发表于 2008-5-15 19:25 | 只看该作者
thanks

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表