MySQL的主从同步是一个很成熟的架构,优点为:①在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力;②在从主服务器进行备份,避免备份期间影响主服务器服务;③当主服务器出现问题时,可以切换到从服务器。所以我在项目部署和实施中经常会采用这种方案;鉴于生产环境下的mysql的严谨性,我这里推荐采用张宴兄的MySQL源码编译的方法;
数据库目录及脚本位置
my.cnf配置文件 /data/mysql/3306/my.cnf
mysql数据库位置 /data/mysql/3306/data
mysql管理脚本 /data/mysql/3306/mysql
主数据库:192.168.110.64
从数据库:192.168.110.62
操作系统:RHEL5.4 64位
服务器类型: HP 580G5,双四核XeonE5520,32G内存,4块300GSAS做成RAID10
一、设置主库
1、修改主库my.cnf,主要是设置个不一样的id和logbin
#vim /data/mysql/3306/my.cnf
server-id = 1
log-bin= binlog
binlog-do-db=iea
2、重启主库生效
#/data/mysql/3306/mysql restart
3、登陆主库
#/usr/local/webserver/bin/mysql -u root -p
4、赋予从库权限帐号,允许用户在主库上读取日志
mysql> grant all privileges on *.* to 'admin'@'%' identified by '12345678';
5、检查创建是否成功
select user,host from mysql.user;
6、锁主库表
mysql> flush tables with read lock;
7、显示主库信息
记录File和Position,从库设置将会用到
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 1635708 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
8、另开一个终端登陆124,打包主库迁移数据
# cd /data/mysql/3306
# tar zcvf data124.tar.gz ./data
二、设置从库
1、传输拿到主库包、解包
登陆从库
#cd /data/mysql/3306
#tar zxvf data124.tar.gz
2、解锁主库表
mysql> unlock tables;
3、修改从库my.cnf
# vi my.cnf
# slave
server-id=2
master-host=192.168.110.64
master-user=admin
master-password=12345678
4、验证连接主库
# /usr/local/webserver/bin/mysql -h 192.168.110.64 -u admin -p
5、在从库上设置同步
设置连接MASTER MASTER_LOG_FILE为主库的File,MASTER_LOG_POS为主库的Position
mysql> slave stop;
mysql> change master to master_host='192.168.110.64',master_user='admin', master_password='12345678',
master_log_file='binlog.000003', master_log_pos=1635708;
mysql> slave start;
6、启动从库服务
mysql> slave start;
7、进行测试
在主库上的iea表上建立名为yuhongchun的表
mysql> CREATE TABLE `yuhongchun` (
`id` INT( 5 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
`username` VARCHAR( 20 ) NOT NULL ,
`password` CHAR( 32 ) NOT NULL ,
`time` DATETIME NOT NULL ,
`number` FLOAT( 10 ) NOT NULL ,
`content` TEXT NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = MYISAM ;
※值得注意的是:在从库上检查是否有yuhongchun的表,即时可以反映,这表示成功了(这同时也为安全留下了隐患,如果有误删表的操作那就不得了,所以主库上的全备一定要做好);剩下的工作就是维护了,比如时不时去检查下主库的hotcopy的备份情况等,观察下备份的日期是否为最近的一天,等等。