两台机器:
主:192.168.1.89
辅:192.168.1.188
1、
在192.168.1.89的mysql中执行:create database test;并创建表
CREATE TABLE `users` (
`UserID` bigint(20) NOT NULL auto_increment,
`Username` varchar(64) NOT NULL default '',
`Password` varchar(64) NOT NULL default '',
PRIMARY KEY (`UserID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
编辑192.168.1.89上mysql配置文件/etc/mysql/my.cnf,在[mysqld] 下增加:
[mysqld]
server-id = 1 #唯一标志
log_bin = /var/log/mysql/mysql-bin.log #同步数据库的日志文件
binlog_do_db = test #要同步的数据库
2、
重启192.168.1.89的 mysql
进入到mysql中执行命令:show master status; #查看主机状态,显示如下
+------------------+----------+---------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+---------------+------------------+
| mysql-bin.000060 | 98 | test | |
+------------------+----------+---------------+------------------+
注:辅库配置完同步后执行show slave status里的Master_Log_File,Read_Master_Log_Pos,Replicate_Do_DB和这里的值分别相等
3、
192.168.1.89的mysql中创建用户testsyn拥有replication slave权限
grant replication slave on *.* to "test"@"192.168.1.%" identified by 'test' with grant option;
4、
配置辅库192.168.1.188 的/etc/mysql/my.cnf文件,在[mysqld] 下增加:
server-id = 2
master-host = 192.168.1.89
master-user = test
master-password = test
master-port = 3306
master-connect-retry = 5 #重试间隔时间
replicate-do-db = test #同步db
5、
查看辅库状态,进入到mysql中,输入命令:show slave status\G; 显示结果如下
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.89
Master_User: test
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000060
Read_Master_Log_Pos: 98
Relay_Log_File: mysqld-relay-bin.000005
Relay_Log_Pos:
Relay_Master_Log_File: mysql-bin.000060
Slave_IO_Running: Yes #连接到主库,并读取主库的日志到本地,生成本地日志文件,为Yes则生效
Slave_SQL_Running: Yes #读取本地日志文件,并执行日志里的sql ,为Yes则生效
Replicate_Do_DB: test
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: 98
Relay_Log_Space:
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
如果出现Slave_IO_State: Waiting for master to send event,说明两个数据库已经同步,辅库192.168.1.188会自动创建test数据库,如果没有出现,下面的方式可以帮你解决这个问题
在辅库上停止slave,执行命令stop slave;
执行命令:change master to master_host='192.168.1.89', master_user='test', master_password='test', master_log_file='mysql-bin.000060', master_log_pos=98;
这里的值应该和主库上执行show master status的值写成一致,不然就会出错哦。
执行start slave; 查看show slave status\G; 如果辅库上test没有创建,则需要执行下一步操作
6、
从主库上将库导出来,执行命令:
mysqldump --opt --master-data -uroot -ptest test > /home/test/test.dump
在辅库上创建test库create database test,
stop slave #先停止slave
将test.dump导入到test库中:mysql -uroot -test test < /home/test/test.dump
start slave
7、在主库中插入数据:
insert into users (username,password) values ('test1','test1');
辅库上的users表里也相应的有了数据
如果需要双向同步, 配置上是一样的,重复1-7的步骤就可以了。