本文说的mysql主备是指单向、异步的数据复制。可以是一个主、多个备。
这样做的好处显而易见:有利于健壮性、速度和系统管理。备用数据库可以做为只读查询和备份的机器,减轻主用数据库的负担。
实施前提:
主用数据库的配置里至少有:
|
|
[mysqld] log-bin=mysql-bin server-id=1 |
建议主备的数据库版本一致。
我所知道的最简单的实施方式(不需要停主库,甚至不需要长时间地禁止主库写入):
主库操作:
在主库里建一个复制用的用户:
|
|
grant replication slave on *.* TO 'replication'@'备库地址' identified by 'replication'; |
导出主库的数据,并记下当然日志文件和偏移:
|
|
mysqldump --master-data=2 --single-transaction -uroot -p --all-databases >dumpfile |
这里是把数据以SQL的形式导出,并记下导出瞬间的日志文件和偏移(得益于--master-data=2参数),出来的dumpfile的前面会有一行类似以下的注释信息,就是文件名和偏移值了:
|
|
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000011', MASTER_LOG_POS=1061553673; |
对于这步,网络上一般采用的方法为:
|
|
FLUSH TABLES WITH READ LOCK;--先把主库设置成只读,然后导出SQL或者直接复制数据文件 SHOW MASTER STATUS; --记下日志文件和偏移 UNLOCK TABLES; --恢复主库写入 |
这样,至少在复制数据的那段时间,主库是不可提供服务的。
备库操作:
复制主库的/etc/my.cnf和dumpfile。
把主库配置里的 server-id 改成2(或者3、4,多个备库保存互不相同),再加上
|
|
relay-log = slave-relay.log relay-log-index = slave-relay-log.index |
导入数据:
进入mysql命令行执行:
|
|
SLAVE STOP; CHANGE MASTER TO MASTER_HOST='主库地址', MASTER_PORT=3306, MASTER_USER='replication', MASTER_PASSWORD='密码', MASTER_LOG_FILE='mysql-bin.000011', MASTER_LOG_POS=1061553673; SLAVE START; |
然后,就搞定了,可以在备库执行
查看同步的状态,如果此命令的输出里有两个“system user”的进程,并且Command都是“Connect”的话,就差不多OK了,此时,任何对主库的修改,都能准实时地从备库里查询出来。
参考文章:mysql官方中文手册
发表于:2011年05月11日 19:48 | 分类: 备忘 | 6 个评论 »
我那Ubuntu源服务器(u.srt.cn),最近出现了一些很诡异的错误。
比如:之前设置的crontab同步linux.deepin.org的iso镜像,已经有一段时间没有成功过了,手工执行rsync,却发现连的似乎是自己,因为banner都出来“Thanks for using SRT ubuntu mirror.”了,但是ping linux.deepin.org 却又能得到正确的结果。
再比如之前我设置了用公钥可以ssh登录另外一台机器,但是现在却提示我输入密码。
排查了许久之后,发现了一个问题,很多(但不是全部)公网的域名虽然ping的时候对应了正确的ip,但是正在使用(比如上面的rsync或ssh)的时候,好像都指到本地了。
再后来,无意之中,发现用ping6 去ping那些有问题的域名,返回的都是 localhost(::1),于是终于知道怎么回事了:系统用IPv6去访问那些域名了,而那些域名的IPv6解析不正确。
为了验证这点,只需要把系统的IPv6彻底禁用再试试就成了,但是服务器也是ubuntu,而ubuntu最新的版本都已经把IPv6编译进内核了,不能通过rmmod来禁用IPv6了,要完全禁用需要修改grub的配置,给内核传参数才行(方法见这里)。
这显然太麻烦了,其实暂时禁用一下还是有方便的办法的,就是这样:
|
|
echo 1 | sudo tee /proc/sys/net/ipv6/conf/all/disable_ipv6 |
执行完以后,可以执行
来确认已经禁用成功了,如果这命令没有输出就OK了。
然后现在再用ping6的话,会提示connect: Network is unreachable。
再去试试之前的rsync和ssh,果然都正常了。
现在我担心的是:IPv4地址不都已经枯竭了吗?接下来该怎么办呢?
发表于:2011年02月10日 17:50 | 分类: 故障分析 | 6 个评论 »
网友MaskRay指出,之前版本的e-file在某些情况下,搜索结果会显示错误的HOMEPAGE信息。
并给我发来了一个patch。
我验证了一下,果然是这样,于是更新了一下,并把gentoo china overlay里的版本也一并更新了。不过portagefilelist.de自己做了一个包(app-portage/pfl)已经在portage里了,里面就包含了这个e-file,所以我在考虑是不是要删除overlay里的版本。。。恩,先mask掉好了,用overlay的同学可能需要自己unmask一下了,或者直接从这里下载也成。
哦,对了,非常感谢MaskRay。
发表于:2011年02月09日 21:09 | 分类: e-file | 1 个评论 »
昨天,HZLUG有了第一次线下活动,虽然地点远在滨江的网易大楼,但前来参加的仍然有60人左右,有学生也有已经工作的,有各大IT公司的SA还有来自上海的debian developer。
这次的人数已经大大出乎我的意料了,之前我觉得最多也就10多20个人的样子,演讲都可以直接围着电脑讲的那种,呵呵。。。
活动的详情可以看group内的帖子,也可以看TX的博文,都有大量的照片哦。
我这里就贴一下我演讲的slide吧:
发表于:2011年01月09日 11:57 | 分类: 流水帐 | 3 个评论 »
首先声明,本文不是神舟的软文。
07年底,我买了一台神舟的笔记本,但是没过几天,就出现了问题,所以08年初去换了一台新的。
说实话,当时确实觉得神舟不靠谱,尤其是人家都在质疑神舟的时候我出的手,而且买回来没几天又坏了。但是后来事实证明,神舟的性价比还是可以的:当时5k多点的价格,买是配置就算放在今天也不算很差。尤其是显示器的分辨率,现在1680 × 1050的分辨率也还是不多见,这是我最满意的一点。
说说具体情况:3年来我基本上是办公+家用两用,使用时间蛮长的,有数据为证:
|
|
lily@LLY ~$ sudo smartctl -A /dev/sda | grep Power_On_Hours 9 Power_On_Hours 0x0032 087 087 000 Old_age Always - 10102 lily@LLY ~$ echo "scale=2;10102/3/365" | bc 9.22 |
也就是说,3年一共使用的时间是10102个小时,平均每天工作9.22小时。
损耗方面:电池,现在基本只能作为UPS防止意外断电用了,估计能撑10min就很好了;光驱也严重挑盘了,不是质量很好的盘读不了了,刻录功能也废了;另外,键盘在我把所有键帽拆下来洗了一遍再装上以后,2个键变得不怎么灵了(能按,但是弹回无力了,算基本不影响使用吧);电源键下陷严重,不太好按了。初此之外,主要的硬盘、CPU、内存什么的,一点问题都没有。
可以说,神舟的质量算是经得起考验的。不过,好像现在随着其他品牌的价格也都下降了蛮多,神舟的性价比优势也在渐渐失去了,希望神舟能掀起下一轮的降价风波,给消费者带来更多物美价廉的好本本。这样我就更支持你了。
发表于:2011年01月03日 22:51 | 分类: 流水帐 | 33 个评论 »
今天,在盛大某网站注册的时候,身份证必填,但我又不想填真实身份证号码,于是随便编了串自认为合法的身份证号码,但是却马上被提示号码错误,由于响应速度极快,可以肯定不是联机校验正确性的,那也就是说第二代身份证除了大家都知道的几位表示生日和性别的规则以外,还有另外的自我校验规则。于是翻开页面源码查看,发现这段js没有被压缩,所以规则也很好懂。
就在这里给大家科普下,不知道是不是火星了,呵呵。
以下代码来自这里,版权归盛大。当然,你也可以在维基百科找到更详细的介绍和算法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
iW = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1); iSum = 0; for( i=0;i<17;i++){ iC = v_card.charAt(i) ; iVal = parseInt(iC); iSum += iVal * iW[i]; } iJYM = iSum % 11; var sJYM = ''; if(iJYM == 0) sJYM = "1"; else if(iJYM == 1) sJYM = "0"; else if(iJYM == 2) sJYM = "x"; else if(iJYM == 3) sJYM = "9"; else if(iJYM == 4) sJYM = "8"; else if(iJYM == 5) sJYM = "7"; else if(iJYM == 6) sJYM = "6"; else if(iJYM == 7) sJYM = "5"; else if(iJYM == 8) sJYM = "4"; else if(iJYM == 9) sJYM = "3"; else if(iJYM == 10) sJYM = "2"; var cCheck = v_card.charAt(17).toLowerCase(); if( cCheck != sJYM ){ return false; //对不上就是假号码 } |
发表于:2011年01月01日 18:35 | 分类: 备忘 | 24 个评论 »
2010年的最后一天,打开自己的blog看了一眼,最后一个月居然什么都没留下了,觉得这样实在不太好,于是趁最后时刻,写点什么。
想了一下有什么值得一写的,发现还真不多,因为近来实在是少有时间去折腾,就拿这个来充数吧,如果能帮到有同样现象的朋友,也算不错。
我的gentoo在某次升级以后,gnome-panel就突然消失不见了,我的环境是蛮正常蛮标准的gnome+compiz,我的compiz开了窗口阴影,在屏幕最上方,本来是panel的地方,阴影还是有的。ps看了一下进程,gnome-panel也在。杀掉重启,或者执行 gnome-panel –replace 都无效。看起来就是面板的高度变成了0像素。
查了任何可查的日志,也没有发现什么异常。于是google了一把,发现有人说把 .gconf 删掉就可以恢复了,于是先把整个xdm停掉,把 .gconf 改名,再启动gnome,发现面板果然正常了。当然副作用就是我的大部分设置都丢了,这是我不能接受的。
当然到了这一步,就比较好办了,虽然我的办法很土,但是有效:继续用类似二分法的办法缩小.gconf里面的影响范围,当然,由于gconfd每次都会随gnome启动,所以每做一次范围确认都得停掉gnome,再打开。呵呵,虽然麻烦,但是还是很快早到了元凶,那就是: ~/.gconf/desktop/gnome/interface/%gconf.xml 一个主管界面和字体设置的配置文件,于是,干脆把它删掉,重新在系统-首选项-外观 那里设置一下字体,我的gnome-panel就这么回来了。
可能我这个问题是因为我的ubuntu和gentoo共用一个 /home 引起的,但是奇怪的是ubuntu下面板一切正常,自是gentoo有问题。
好了,问题解决了,最后一句俗却真诚的话:新年快乐!
发表于:2010年12月31日 23:18 | 分类: gentoo, 故障分析 | 4 个评论 »
工作中,经常会有用python访问各种数据库的需求,比如从oracle读点配置文件或者往mysql写点结果信息之类的。
这里列一下可能用到的各个模块。
sqlite3: 内置模块
用sqlite,有时候确实很方便,我觉得它确实做到了宣称的“零配置”。python自2.5版以来,就内置了对sqlite3的支持,使用也非常简单,按照文档上来:
|
|
#打开db文件,获得连接 conn = sqlite3.connect('数据文件名') #获得游标 c = conn.cursor() #执行SQL c.execute('''SQL 片段''') #如果有对数据的修改操作,那就需要commit一下 conn.commit() #关闭游标 c.close() #关闭连接 conn.close() |
另外,关于sqlite在C和bash下的用法,可以参考为以前的文章。
oracle: cx_Oracle
其实,前面先介绍sqlite3,除了它确实是个小数据库以外,还有一个原因:其他数据库在python下的操作,其实基本上和sqlite3的操作是一样的,也就是说,python其实已经几乎统一了数据库的接口。
打开cx_Oracle的文档页面,你会发现其风格也和python文档很像,因为他们都是用 Sphinx 做的。模块的使用方法就更像了,把上面的代码里,获得连接的那行,换成这样:
|
|
conn = cx_Oracle.connect('username/password@TNSname') |
就可以了。只要把用户名、密码、TNS组成一个字符串,传进去,就可以得到一个oracle的连接了。
mysql: MySQLdb
和前两个非常类似,连接的时候用以下两个语法之一:
|
|
conn = MySQLdb.connect('host', 'username', 'password', 'database') conn = MySQLdb.connect(host="host", user="username", passwd="password", db="database") |
接下来,也把它当成sqlite用就好了。
excel: pyExcelerator
好吧,我承认excel不算数据库,只是写在这里充数而已,哈哈。因为偶尔还是要取下别人发来的excel里的数据的。
其实,用pyExcelerator来读取文件也是很简单的:
|
|
sheets=pyExcelerator.parse_xls('xxx.xls') |
这样出来以后,sheets就是整个工作薄了,它是工作表组成的list,而一个工作表对应于一个tuple,格式是: ('工作表名', 内容),而内容又是一个dict,key是一个(行数, 列数)的tuple,value才是正在的对应格子的内容。看起来确实比较绕,好在处理excel的应用也不多,将就吧。
另外,其实pyExcelerator还支持写入数据到excel的,如果有把查询结果保存成excel的需求的话,可以试试看,我还是尽量不用这种格式了,哈哈。
发表于:2010年11月28日 12:18 | 分类: 编程相关 | 12 个评论 »
现在觉得,时间的流逝速度和年龄确实是成正比的。也就是说,年纪越大,就会觉得空闲时间越来越少了~
因此,本blog都大半个月没更新了,呵呵。也不能老这么沉寂下去,今天来写点东西。
熟悉数据库的朋友们都知道,大多数数据库都有个truncate指令:truncate table xxx可以把xxx表里的所有数据都删掉,但是保留表结构。其实,在有任何数据库之前,UNIX系统里就有了truncate这个命令了,当然后面的*nix里都保留了这个。可以想像,系统里的truncate命令的操作对象肯定是文件,而且此命令不仅能把文件的数据删成0字节,还可以缩减(甚至扩大)文件至指定的大小(通过 -s 选项指定文件大小值),这对于那种日志头部有些不想删除的关键信息,但后面的部分又很多很杂的情况下很有用。对于普通的日志文件,我们要清理的时候通常可以执行 > log 来清除文件的内容(这样,log文件会变成0字节),但是如果清理的同时想保留原始日志的前面4K的信息,不用truncate就会很麻烦了。
truncate的用法还是通过实战来解释吧,如下:
|
|
lily@LLY ~$ echo -n 1234567 > txt lily@LLY ~$ cat txt 1234567lily@LLY ~$ lily@LLY ~$ truncate -s 4 txt lily@LLY ~$ cat txt 1234lily@LLY ~$ lily@LLY ~$ ls -l txt -rw-r--r-- 1 lily lily 4 10月 24 16:54 txt lily@LLY ~$ truncate -s 1M txt lily@LLY ~$ ls -l txt -rw-r--r-- 1 lily lily 1048576 10月 24 17:17 txt lily@LLY ~$ du txt 4 txt lily@LLY ~$ wc -c txt 1048576 txt |
这里还可以看到一个“奇怪”的现象,本来已经缩至4字节的文件,把它扩展成1M以后,ls 和 wc 的结果显示大小确实是1M,但是 du 的结果却发现大小还是4字节。这也是要注意的地方之一,这种文件称为“空洞文件”,也就是说,文件的部分内容并没有实际存在于硬盘上(即没有分配对应的inode),只是“声称”有1M的大小而已。对于不存在于硬盘上的那部分字节,如果去读的话,也是不会报错的,会读到全0的数据。
这也从另一个方面反映出ls等命令默认显示的是文件“声称”的大小,而du (disk use)默认显示的是真正的磁盘占用。这里是我以前的另外一个例子。
发表于:2010年10月24日 18:29 | 分类: CLI软件 | 20 个评论 »
gnome默认的图片查看器是eog(Eye of GNOME,gnome之眼),但是由于这个比较笨重,我不是很喜欢。
之前用的都是 gpicview 这个轻量级的小玩意。因为我对图片查看器的需求只有:能快速打开,能进行旋转操作就可以了,当然,最好旋转完了以后能自动保存,这是因为我的傻瓜相机真的很傻,没有重力感应装置,所以拍出来的相机有很多都需要手工转一下~
但是,不知道从什么时候起,我的gpicview就不能做旋转照片的操作了(记得好像是哪次jpeg库升级了以后才有的,不是很确定),一点旋转按钮,程序就自动退出了,终端运行的话,会丢出一句让人摸不着头脑的提示:Bogus virtual array access。本来以为马上升级一下就可以解决问题的,但是等了很久也没解决,于是去找类似的替代品,就发现了这个:VIEWNIOR。
功能上没啥可说的,就是显示和支持旋转,哈哈,主要是依赖少,基本只依赖一个GTK了。依赖少,自然速度也快~
恩,够用就好。
发表于:2010年10月06日 16:04 | 分类: GUI软件 | 8 个评论 »