【转载】 http://zhangjianjian.blog.51cto.com/2944771/662955
实验平台:virtualbox 4.12
操作系统:RHEL5.4
MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,另一个或几个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护日志文件的一个索引以跟踪日志循环。当一个从服务器连接到主服务
器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知下一次更新。
这里使用两台干净的虚拟机执行模拟实验,其中mysql为主服务器,mysql2为从服务器,对应的IP地址为
一.首先安装mysql
这里使用yum进行安装,安装前要保证yum配置正确
[root@mysqll ~]# yum install mysql mysql-server mysql-client mysql-devel mysql-shared -y
由于要进行主从复制,所以从服务器做好与主服务器安装相同版本的mysql,这里选择安装一样的版本
- [root@mysql2l ~]# yum install mysql mysql-server mysql-client mysql-devel mysql-shared -y
在主服务器创建数据库
- [root@mysql ~]# service mysqld start
- [root@mysql ~]# mysql
- mysql> create database dns;
- mysql> use dns;
- mysql> create table mytb (
- ID BIGINT(20) NOT NULL DEFAULT 0,UserID BIGINT(20) NOT NULL,ZoneID BIGINT(20) NOT NULL,Zone VARCHAR(255) NOT NULL,Host VARCHAR(255) NOT NULL,Type ENUM('A','SOA','NS','MX','CNAME','PTR','TXT','AAAA') NOT NULL,Mx_priority INT(10),Data VARCHAR(255) NOT NULL,TTL INT(10) NOT NULL DEFAULT '600',View VARCHAR(20) NOT NULL DEFAULT 'DEF',Active ENUM('Y','N') NOT NULL DEFAULT 'Y',DomainLevel INT(11) NOT NULL DEFAULT 1,Standby VARCHAR(255) NOT NULL,CheckHostID BIGINT(20) NOT NULL DEFAULT 0,IsFensheng TINYINT(1) NOT NULL DEFAULT 0);
- mysql> LOAD DATA INFILE '/tmp/table.sql' INTO TABLE mytb;
- //导入事先准备好的数据库文件
二.设置主从复制
为从服务器在主服务器上复制数据创建一个账户,并授予该账户REPLICATION SLAVE权限
- mysql>GRANT REPLICATION SLAVE ,REPLICATION CLIENT,RELOAD,SUPER ON *.* TO 'redhat'@'192.168.56.%' IDENTIFIED BY 'redhat';
mysql>Flush privileges; // 刷新权限,使设置生效
创建更新日志的目录并给mysql用户的权限
编辑mysql上的my.cf,设置其为主服务器
[root@mysql ~]# vim /etc/my.cnf
在[mysqld]字段添加
server-id=1 //本机数据库ID
log-bin =mysql-bin //重启服务开启二进制日志功能
同样的操作,在从服务器mysql2上设置server-id=2
查看mysql的状态:
mysql> show master status;
在mysql2上执行下面的命令:
- [root@mysql2 ~]# mysql
- mysql> CHANGE MASTER TO
- MASTER_HOST='192.168.56.101', //指定主服务器
- MASTER_USER='redhat', //复制用的用户名
- MASTER_PASSWORD='redhat', //对应的密码
- MASTER_LOG_FILE='/var/lib/mysql'; //日志目录
- mysql> START SLAVE; //开启从服务器功能
查看一下从服务器状态:
mysql> show slave status\G;
当看到Slave_IO_Running ,Slave_SQL_Running 都应该是yes,表示从库的I/O,Slave_SQL线程都已经开启
在mysql2上查看一下数据库
mysql> show databases;
可以看到从服务器已经从主服务器那里复制到了dns数据库,说明主从复制工作正常,为进一步验证,在之服务器上删除一些数据
- mysql> delete from dns.mytb where zone like '%.net';
- Query OK, 71 rows affected (0.04 sec)
此时去mysql2上查询
- mysql> select * from dns.mytb where zone like '%.net';
- Empty set (0.01 sec)
说明已经同步了刚才的操作,配置完成。