这两天一直在尝试想利用mysql的主从复制架构去做些东西,所以大胆尝试了一把。
网上也一直流传mysql的master/slave的可靠性、健壮性、成熟性...
最后一步就是把程序架上去,本来考虑选型PHP
Zend框架来测试的,可能是回顾最近Python的学习体会,而且python的脚本也比较简单,于是就是他了。
整个体验操作几天前已抽空完成,现在回顾总结整个过程,提纲大致如下:
了解mysql主从复制原理
真实机配置安装
通过不同配置操作验证整个复制过程
安装MySQLdb
写python脚本,批量操作数据
观察数据复制效果
一、了解MySQL主从复制原理
主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。
当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。
从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。
考虑到有些架构的复杂性,有主-从-从/主-主-从等,但有一种情况要尽量避免,那就是尽量不要对从数据做更新操作,否则同步会因为冲突而停止。
如果有冲突发生要尽早预警,更改同步位置,继续开启同步过程。
二、真实机配置安装
1.配置主 172.16.74.48 在my.cnf 文件 [mysqld]段后,修改如下
vi /etc/my.cnf
server-id = 1
1.) 启动msyql
service mysqld start
2.) 分别给两台slave授权
mysql> GRANT REPLICATION SLAVE ON
*.* TO 'slave74_49'@'172.16.74.49' identified by
'123456';
mysql> GRANT REPLICATION SLAVE ON
*. * TO'slave74_46'@'172.16.74.46' identified by
'123456';
2.分别配置两台slave
1.) 第一台(ip 172.16.74.46)
vi /etc/my.cnf
server-id = 2
master-host = 172.16.74.48
master-user = slave74_46
master-password = 123456
启动msyql
service mysqld start
进入mysql 输入以下命令
mysql> START slave;
mysql> quit;
2.)第二台(ip 172.16.74.49)
vi /etc/my.cnf
server-id = 3
master-host = 172.16.74.48
master-user = slave74_49
master-password = 123456
启动msyql
service mysqld start
进入mysql 输入以下命令
mysql> START slave;
mysql> quit;
三、通过不同配置操作验证整个复制过程
四、安装MySQLdb
大多数人应该在这里会走弯路,在python setup.py make 提示失败!
下载后执行该模块即可在线安装最新版本的 easy_install
# python ez_setup.py
通过这种方式就安装成功了 easy_install ,之后可用如下方式安装扩展模块 XXX
# easy_install XXX
比如安装MySQLdb:
# easy_install MySQLdb
MySQLdb在Python中也就相当于JAVA中的MySQL的JDBCDriver同理对待即可!
如果碰到以下问题,参考如下:
export LD_LIBRARY_PATH=/usr/local/mysql/lib/mysql:$LD_LIBRARY_PATH
or
ln -s /usr/local/mysql/lib/libmysqlclient_r.so.16 /usr/lib/libmysqlclient_r.so.16
五、写python脚本,批量操作数据
通过python批量插入100W条数据,共耗时385秒!
六、观察数据复制效果
我尝试过用我最快的速度去查看slave的同步状态,感官几乎分辨不出差别,近乎实时!