本人参考了一篇博文:Centos5.4和Windows server 2003的MySQL主从同步配置
当系统的并发量比较大时,单个MySQL数据库无法支撑,也不保险。因此,在实际的生产环境中通常会配置两台MySQL数据库,一台是Master主数据库,另一台是Slave从数据库,其中主数据库主要承担写操作,从数据库主要承担读操作,这样实现读写分离,提高MySQL数据库的并发量,提高系统的可用性。
下面将根据参考博文以及自己的操作过程给出MySQL主从同步配置的过程。
1、Window XP 下安装MySQL
MySQL的版本是5.5.10,这个MySQL作为Master主数据库,安装过程就不多说了。
2、CentOS6.5 下安装MySQL
MySQL的版本是5.1.73,这个MySQL作为Slave从数据库。
安装的过程详见:centos6.5下安装mysql
3、分别登录master机和slave机的mysql
mysql –u root –p
创建数据库
mysql>create database test;
4、为master添加用户
myhostname为master机的域名,也可以改成IP,但最终以slave能连得上master为准。
mysql>create user 'myUser'@'myhostname' identified by '123456';
mysql>grant all privileges on test.* to 'myUser'@'myhostname' identified by '123456';
mysql>flush privileges;
5、slave中的mysql远程登陆master上的mysql
[root@bogon share]# mysql -h 192.168.1.102 -P 3306 -u myUser -p123456
6、分别修改master和slave的配置文件my.ini和my.cnf
6.1、修改master的my.ini
在[mysqld]下添加
log-bin=E:/MySQL/MySQL Server 5.0/logs/mysql-bin # 这是我的二进制日志路径很重要,如果没有logs文件夹可以自己建立
server-id=1 #这是主服务器进程
binlog-do-db=test #要同步的数据库,如果没有本行,即表示同步所有的数据库 然后在master机上为slave机添加一同步帐号
给从数据库的用户myUser授权访问
mysql>grant replication slave on *.* to 'myUser'@'192.168.1.102' identified by '123456';
重启master 机的mysql服务,命令行下:
net stop mysql
net start mysql
查看master的状态
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000005 | 588 | test | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
6.2、修改slave的my.cnf
把默认的log-bin=mysql-bin,server-id=1注释掉(前面加#)
[mysqld]字段下添加如下内容
server-id=2
master-host=192.168.1.102
master-user=myUser
master-password=123456
master-port=3306
master-connect-retry=60
replicate-do-db=test #要同步的数据库
# replicate_ignore_table=test. sessions #可以忽略某个或某些表同步 注意:slave的log-bin就没有必要设置了(有人推荐设置),否则可能出现不必要的错误
配置好后,进入mysql
[root@bogon ~]# mysql -u root -p
添加master参数,要与master机的参数一致,注意:每次重起master机后,master_log_file和master_log_pos这两个参数的值可能会变化,因此要重新设置slave中的master参数。
mysql>change master to master_host='192.168.1.102', master_user='myUser', master_password='123456', master_port=3306, master_log_file='mysql-bin.000005', master_log_pos=588;
重启slave,
mysql>slave stop;
mysql>slave start;
mysql>show slave status;
如果Slave_IO_Running、Slave_SQL_Running状态为Yes则表明设置成功.
7、验证同步
7.1 验证表结构同步
7.1.1 在master mysql的数据库test中创建表user
mysql> use test;
Database changed
mysql> create table user(id varchar(32),name varchar(32));
Query OK, 0 rows affected (0.17 sec)
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| user |
+----------------+
1 row in set (0.02 sec)
7.1.2 在slave mysql的数据库test中查看表
mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| user |
+----------------+
1 row in set (0.00 sec)
说明master与slave的表user同步成功!
7.2 验证表数据同步
7.2.1 向master中的表user插入数据
mysql> insert into user(id,name)values('id1','name1');
Query OK, 1 row affected (0.30 sec)
7.2.2 查看slave中表user中的情况
mysql> select * from user;
+------+-------+
| id | name |
+------+-------+
| id1 | name1 |
+------+-------+
1 row in set (0.00 sec)
说明master与slave的表user中的数据同步成功!