Master(windows XP)/Slave(Ubuntu 12.04)
Master端IP:192.168.100.31
Slave端IP:192.168.100.30
主从mysql的用户名密码都分别为root/system
1> 主机master设置
1.1> 启动mysql服务
mysqld-nt --defaults-file=my_1.ini # my_1.ini自己定制的mysql配置文件
1.2> 登陆mysql(master的root用户登陆密码为system)
mysql -u root -p -h 192.168.100.31 -P 3306
1.3> 创建测试数据库
create database test1;
1.4> 选择数据库
use test1;
1.5> 创建表名为test1的表
CREATE TABLE test1 (id int, name varchar(100));
1.6> 在表test1中插入3条测试数据
INSERT INTO test1 VALUES (1,'name1');
INSERT INTO test1 VALUES (2,'name2');
INSERT INTO test1 VALUES (3,'name3');
1.7> 设置Mysql Replication(master的root用户登陆密码为system)
mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT,RELOAD,SUPER ON *.* TO'root'@'192.168.100.30' IDENTIFIED BY 'system';
1.8> 权限生效
mysql>flush privileges;
1.9> 退出mysql命令行界面
mysql> exit
1.10> 停止mysql服务
在任务管理器中,停止任务mysqld-nt.exe
1.11> 更改Mysql配置文件my_1.ini, 在配置文件中添加以下内容
server-id =1 # 注意不能与其他服务器的配置一样
log_bin ="..\data\mysql-bin.log"
binlog-do-db =test1 # 自动同步的数据库
1.12> 启动mysql服务, 同步骤1.1
mysqld-nt --defaults-file=my_1.ini # my_1.ini自己定制的mysql配置文件
1.13> 启动命令行, 通步骤1.2
mysql -u root -p -h 192.168.100.31 -P 3306
1.14> 记录 master status, 信息记录好,待设定slave用
mysql>show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 98 | test1 | mysql |
+------------------+----------+--------------+------------------+
2> 从机Slave设置
2.1> 启动mysql服务
#service mysql restart
2.2> 登陆mysql(slave的root用户登陆密码也为system, 我的系统是这么配置的, 未要求必须这么做!)
mysql -u root -p
2.3> 创建测试数据库
create database test1;
2.4> 选择数据库
use test1;
2.5> 创建表名为test1的表
CREATE TABLE test1 (id int, name varchar(100));
2.6> 在表test1中插入3条测试数据
INSERT INTO test1 VALUES (1,'name1');
INSERT INTO test1 VALUES (2,'name2');
INSERT INTO test1 VALUES (3,'name3');
2.7 退出mysql
mysql>exit
2.8 停止mysql服务
#service stop mysql
2.9 打开Mysql的配置文件/etc/mysql/my.cnf, 在[mysqld]中添加以下内容
server-id=2
log-bin=mysql-bin
replicate-do-db=test1
保存退出
2.10 重新启动Mysql服务
#service mysqld start
2.11 再次登陆mysql, 同2.2
mysql -u root -p
2.12 启动slave, 配置同步服务器相关信息
mysql> change master to master_host='192.168.100.31',master_user='root', master_password='system',master_log_file='mysql-bin.000001',master_log_pos=98;
mysql> START SLAVE;
2.13 查看slave状态
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.100.31
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 587
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 733
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: test1
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 587
Relay_Log_Space: 890
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
1 row in set (0.00 sec)
ERROR:
No query specified
可以看到
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如果都是yes,代表已经在同步
至此server服务器上的Mysql设置完毕!!!
3> 测试
3.1> 对主机进行增加一条记录INSERT INTO test1 VALUES(4,'name4'); 检测备机是否也增加了此条记录,经检查,数据相同
3.2> 在主机没有对数据库操作的情况下测试主备数据是否一致,经查看主机和备机的的test1表,记录相同,说明备机成功复制数据。
3.3> 停掉备机mysql,对主机进行添加记录的操作,然后再重启备机mysql,经检查,两边数据完全一致。
3.4> 在主机执行mysql> delete from test1 where id=3; 检测两边数据是否一致。经检查,两边数据完全一致。
3.5> 在主机执行创建数据库表格, 发现从机也生成了相应的表格。
---------------------------------------------------------------------------------------------------------
4> 在上述一主一备的配置下,测试通过,现在加入第二台从机测试:
Slave2(windows XP) IP:192.168.100.31
mysql user: root
mysql pass: system
mysql port number: 3307
4.1> 启动mysql服务
#service mysql restart
4.2> 登陆mysql(slave的root用户登陆密码也为system, 我的系统是这么配置的, 未要求必须这么做!)
mysql -u root -p
2.3> 创建测试数据库
create database test1;
4.4> 选择数据库
use test1;
4.5> 创建表名为test1的表
CREATE TABLE test1 (id int, name varchar(100));
4.6> 在表test1中插入3条测试数据
INSERT INTO test1 VALUES (1,'name1');
INSERT INTO test1 VALUES (2,'name2');
INSERT INTO test1 VALUES (3,'name3');
4.7 退出mysql
mysql>exit
4.8 停止mysql服务
#service stop mysql
4.9 打开Mysql的配置文件/etc/mysql/my.cnf, 在[mysqld]中添加以下内容
server-id=3
log-bin=mysql-bin
replicate-do-db=test1
保存退出
4.10 重新启动Mysql服务
#service mysqld start
4.11 再次登陆mysql, 同2.2
mysql -u root -p
4.12 启动slave, 配置同步服务器相关信息
mysql> change master to master_host='192.168.100.31',master_user='root', master_password='system',master_log_file='mysql-bin.000001',master_log_pos=98;
mysql> START SLAVE;
-----------------------------------------------------------------------------------------------------------
通过实验,slave2 也可以同步master的数据!