Submitted by gouki on 2010, October 30, 12:30 AM
记录一个比较简便的mysql的主从同步设置步骤,方便日后使用。
安装环境
centos 5.4
mysql 5.1.xx 采用rpm直接安装
xtrabackup 1.2.22 采用rpm直接安装
XML/HTML代码
- [mysqld]
- server-id = 1
- log-bin
- innodb_flush_log_at_trx_commit=1
- sync_binlog=1
- datadir=/var/lib/mysql
- character-set-server=utf8
- init_connect='SET NAMES utf8'
设定了默认字符集为utf8,可以按实际情况取舍这段配置。
2. Slave:/etc/my.cnf
XML/HTML代码
- [mysqld]
- server-id=2
- datadir=/var/lib/mysql
- character-set-server=utf8
- init_connect='SET NAMES utf8'
3. Master:在master数据库设置用来同步的slave用户权限
XML/HTML代码
- GRANT REPLICATION SLAVE ON *.*
- TO '<slave_username>'@'<slave_ip>'
- IDENTIFIED BY '<slave_password>';
4. Master:导出数据到slave
采用xtrabackup来备份mysql,好处是在master的锁表时间很短,在实际的生产环境也可以使用,并且xtrabackup会自动记录同步日志文件的位置。
XML/HTML代码
- sudo innobackupex-1.5.1 --stream=tar /tmp/ | ssh <slave_host> "mkdir /tmp/db; tar xfi - -C /tmp/db/"
这个步骤会把master的数据包括表结构整个导出并压缩复制给slave,同时解压到slave的/tmp/db目录下。
5. Slave:导入数据到slave
XML/HTML代码
- innobackupex-1.5.1 --apply-log /tmp/db
- innobackupex-1.5.1 --copy-back /tmp/db
- chown -R mysql.mysql /var/lib/mysql/*
6. Slave:开始同步数据
查看/var/lib/mysql/xtrabackup_binlog_info,获得日志文件以及position。
XML/HTML代码
- CHANGE MASTER TO
- MASTER_HOST='<master_host>',
- MASTER_USER='<slave_username>',
- MASTER_PASSWORD='<slave_password>',
- MASTER_LOG_FILE='<see xtrabackup_binlog_info>',
- MASTER_LOG_POS=<see xtrabackup_binlog_info>;
- START SLAVE;
原文来自:http://www.ooso.net/archives/547,做个备份啦
Tags: mysql
DataBase | 评论:0
| 阅读:18474
Submitted by gouki on 2010, October 24, 9:30 PM
传说中,taobao公司的Dba很牛叉,只是一直在关注他们的博客时,发现QA其实也很牛叉。看他们每月的测试中都有一些算法题,而且完成这些题目的语言也是各种各样,也就觉得自己真的很丢人了。。。
看这个吧:Mysql Query Cache学习篇,讲的很详细,不知道淘宝的QA薪水怎么样,他们是怎么面对QA这个职业的,毕竟在很多公司QA都处于一种很尴尬的位置。博客精华文章,是淘宝QA他们的一些精华,确实值得一看。
再转一些javascript的东西,司徒正美博客上的:一些javascript题目,然后我也想着一个很奇怪的事情。好象DZ对firebug作了一点处理?屏蔽了firebug的console的输出(可能是写了同名函数等覆盖了?我没有仔细研究过,只是在测试DZ代码的时候发现没有数据输出)
最后再想着scala和java,前段时间看了一阵,但突然又忘光了。(如果工作中用不到这类语言,想真正学确实比较烦,等工作走上正轨后,就要开始考虑用这类语言做点东西了。)
Tags: mysql, querycache
DataBase | 评论:0
| 阅读:16442
Submitted by gouki on 2010, October 23, 7:37 PM
10月16日 ThinkInLamp Mysql专场中,杨涛涛作了关于MYSQL数据库的优化,最近他在自己的博客上将PPT放了出来,我在这里做一个简单的备份,其实还有SNDA几位DBA的PPT也已经出来了,他们的在thinkinlamp.com 上已经提供下载,我就不再转载了。
我个人相对来说还是比较喜欢mysql的优化,或许对于数据库的设计 我还是停留在程序员的阶层吧。
OK,翠花,上PPT(哦,是PDF版的)
101019150312.pdf
嗯。顺便再附上一份mysql优化的PPT
mysql-introduction-and-performance-optimization.ppt
Tags: thinkinlamp, mysql, ppt
DataBase | 评论:0
| 阅读:18819
Submitted by gouki on 2010, October 18, 11:51 PM
这两天有趣的事情非常多,比如,所谓的QQ一些内部培训资料流出,网上各大网盘啥的流量一下子就非常高了。我当然也不小心就下载了一份,还没有看,不过好象什么百度的资料上已经有在线看了。因为自己也没有看,所以也不太清楚这玩意是真是假。
OK,上正文,16日的MYSQL专场,对于mysql优化讲的较详细的应该算是杨涛涛,他对MYSQL的一些字段类型进行了些介绍,包括他们所含 的字节长度,来介绍给我们让我们了解如何对数据库进行优化,比如,尽量不要用bigint,因为,这在项目中几乎不可能会被用上而他们占的字节长度却是在int中最长的,在数据量大的时候,既占空间,又影响速度。
还介绍了datetime和timstamp等的区别(更多可以看我以前写的连载,里面也有介绍)
不过,他唯独没有提起ENUM字段,说起这个ENUM,它倒是mysql的一个特色字段,在以前很多人喜欢用它,因为他可以设置字段的区间范围,会让值可以被数据库所控制,不至于出现意料不到的值(比如,字段只想有0和1,结果出现了2,那2就是赃数据了)
但ENUM带来的问题也不少,比如数据迁移的时候,他几乎不可能被其他数据库所支持,如果enum里面是字符串,对于其他数据库来说就更郁闷了,还不能设为tinyint等类型的字段(enum虽然可以存储字符串,但对于内部来说,还是以顺序进行索引,比如'a','b','c',我们也可以用索引值来获取值select * from tbl_name whre enum = 2,这与select * from tbl_name where enum = 'b'等义)如果你看明白了这两句SQL为什么等义,那么你也就可以了解为什么不主张用enum字段了。
因为,如果一个设计不合理的ENUM字段,给程序员带来的就完全是梦魇了,比如一个enum字段的范围是('0','1','2','3','4','5'),我想这时候,你会不会哭呢?要知道enum的枚举值对应的索引是从1开始的,因此,insert into table (enum)values(1),你知道是插的什么值吗?你select from table一下,你就会发现,你插入的并不是1,而是0。
更有甚者,由于enum的区间也是可以变动的,如果你在enum的枚举字段范围中加一个值,并且不是加在最后,那么也就相当于,你把原来的范围都改变了索引值,试想这又是多么一个恐怖的事情?
因此,如果你的系统中真的已经使用了mysql的enum字段类型,请在查询的时候直接查询值(并加上单引号),这样就不会使用enum自身隐藏的索引值来获取结果了。【顺便说一下,enum的默认索引是从NULL开始,如果你允许NULL并default NULL】
之所以提起这个,是在用shopnc系统的时候发现大量这样的字段,让人非常郁闷,几乎没有办法优化(如果是纯数值型,还是建议采用tinyint字段吧,毕竟它也只占一个字节,即使出现赃数据,也可以被接受,不象enum,如果纯数字型范围,更改了索引,你就不知道你查询的值是否正确了)
因此建议,如果字段是字符串,并且长度固定,可以尝试用char,如果是数值型,还是用tinyint吧,比较安全稳定,而且即使迁移,问题也不大。
Tags: enum, mysql, tinyint
DataBase | 评论:1
| 阅读:57824
Submitted by gouki on 2010, October 14, 10:23 AM
背景。。。yhustc在群内提问,突然发现自己的基础特别差。所以就找了一下,贴出来,权当笔记(原来心中的回滚是属于原子性啊。。)
事务的:原子性、一致性、分离性、持久性
原子性、一致性、分离性、持久性
(1) 原子性
事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行。这种特性称为原子性。
事务的原子性要求,如果把一个事务可看作是一个程序,它要么完整的被执行,要么完全不执行。就是说事务的操纵序列或者完全应用到数据库或者完全不影响数据库。这种特性称为原子性。
假如用户在一个事务内完成了对数据库的更新,这时所有的更新对外部世界必须是可见的,或者完全没有更新。前者称事务已提交,后者称事务撤消(或流产)。DBMS必须确保由成功提交的事务完成的所有操纵在数据库内有完全的反映,而失败的事务对数据库完全没有影响。
(2) 一致性
事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态。这种特性称为事务的一致性。假如数据库的状态满足所有的完整性约束,就说该数据库是一致的。
一致性处理数据库中对所有语义约束的保护。假如数据库的状态满足所有的完整性约束,就说该数据库是一致的。例如,当数据库处于一致性状态S1时,对数据库执行一个事务,在事务执行期间假定数据库的状态是不一致的,当事务执行结束时,数据库处在一致性状态S2。
(3) 分离性
分离性指并发的事务是相互隔离的。即一个事务内部的操作及正在操作的数据必须封锁起来,不被其它企图进行修改的事务看到。
分离性是DBMS针对并发事务间的冲突提供的安全保证。DBMS可以通过加锁在并发执行的事务间提供不同级别的分离。假如并发交叉执行的事务没有任何控制,操纵相同的共享对象的多个并发事务的执行可能引起异常情况。
DBMS可以在并发执行的事务间提供不同级别的分离。分离的级别和并发事务的吞吐量之间存在反比关系。较多事务的可分离性可能会带来较高的冲突和较多的事务流产。流产的事务要消耗资源,这些资源必须要重新被访问。因此,确保高分离级别的DBMS需要更多的开销。
(4)持久性
持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失。即一旦一个事务提交,DBMS保证它对数据库中数据的改变应该是永久性的,耐得住任何系统故障。持久性通过数据库备份和恢复来保证。
持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失。即对已提交事务的更新能恢复。一旦一个事务被提交,DBMS必须保证提供适当的冗余,使其耐得住系统的故障。所以,持久性主要在于DBMS的恢复性能。
原文来自:http://zhidao.baidu.com/question/111111366
DataBase | 评论:0
| 阅读:15695