参考http://www.mike.org.cn/articles/mysql-master-slave-sync-conf-detail/
利用VirtualBox虚拟两台服务器,配置mysql主从。
环境:
centos 5.5
mysql5.5
A主机ip:192.168.2.175
B主机ip:192.168.2.176
centos iptalbes 防火墙 开启3306端口,否则连接不上
#vi /etc/sysconfig/iptables
如果没有下面一行,则添加上去
-A RH-Firewall-1-INPUT -p tcp -m state -m tcp --dport 3306 --state NEW -j ACCEPT
重启防火墙
#/etc/sysconfig/iptables restart
#iptables -L
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:mysql
有上面这行,代表已经成功开启了mysql外部链接
主从配置过程
主服务器
创建同步用户
在主服务器上为从服务器建立一个连接帐户,该帐户必须授予REPLICAITON SLAVE权限。
服务器A:
mysql>CREATE USER 'replication'@'%' IDENTIFIED BY '000000';
mysql>GRANT REPLICATION SLAVE ON * . * TO 'replication'@'%' IDENTIFIED BY '000000' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
mysql>flush privileges;
修改mysql配置文件(默认路径/etc/my.cnf)
[mysqld]
server-id = 1
log-bin=mysql-bin
binlog-do-db = test
binlog-ignore-db=mysql
重启mysql服务
# mysql restart
Restarting MySQL...
Stoping MySQL...
Starting MySQL...
查看主服务器状态
mysql> show master status\G
*************************** 1. row ***************************
File: mysql-bin.000003
Position: 2056
Binlog_Do_DB: test
Binlog_Ignore_DB: mysql
1 row in set (0.00 sec)
从服务器
修改mysql配置文件(/etc/my.cnf)
server-id = 2
重启mysql服务
# mysql restart
Restarting MySQL...
Stoping MySQL...
Starting MySQL...
用change master语句指定同步位置
mysql>change master to master_host='192.168.2.175', master_user='replication', master_password='000000', master_log_file='mysql-bin.000003', master_log_pos=2056;
注:master_log_file,master_log_pos由上面主服务器查出的状态值中确定。master_log_file对应File,master_log_pos对应Position。mysql 5.x以上版本已经不支持在配置文件中指定主服务器相关选项。
启动从服务器线程
mysql>start slave;
查看从服务器状态
mysql>show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
查看以上两项的值,均为Yes则表示状态正常。
测试主从同步
先在主库中插入一条新的数据
mysql> use test;
Database changed
mysql> desc test;
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| id | smallint(6) | NO | PRI | NULL | auto_increment |
| title | varchar(255) | NO | | NULL | |
| content | text | NO | | NULL | |
+---------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
mysql> insert into test (title)value('hello world');
Query OK, 1 row affected, 1 warning (0.00 sec)
在从库中查询,看到之前主库新增的数据就成功了。