在虚拟机中模拟
master数据库IP为192.168.66.135
slave数据库IP为 192.168.66.134
两台服务器数据库版本相同
网络互相ping通,数据库端口3306通过防火墙开放
用户需要赋予replication slave权限
mysql> grant replication slave on *.* to 'admin'@'192.168.66.135' identified by '123456';
mysql> flush privileges;
我这里直接用root账户所以没使用这条命令
在主数据库mysql目录下找到my.ini 在最后行加上
server-id=1
log-bin=binlog
sync_binlog=1
binlog_format=row
auto_increment_increment = 1
auto_increment_offset = 1
binlog_do_db=你要同步的数据库
replicate_do_db=你要同步的数据库
在从数据库mysql目录找到my.ini最后行加上
server-id=2
log-bin=binlog
sync_binlog=1
binlog_format=row
binlog_do_db=你要同步的数据库
replicate_do_db=你要同步的数据库
启动主数据库
C:\Windows\system32>net start mysql
MySQL 服务正在启动 .
MySQL 服务已经启动成功。
C:\Windows\system32>mysql -u root -p
Enter password: ******
查看master状态
mysql> show master status\G;
*************************** 1. row ***************************
File: binlog.000006
Position: 154
Binlog_Do_DB: 你同步的数据库
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
记下这个binlog.000006 和position 154,我这边重启过几次所以数字比较大
同上启动slave的数据库并进入然后先关闭slave,使用change master to 指定同步master库的相关信息。然后启动slave,查看slave的状态,出来一大串信息,主要看 Slave_IO_Running和Slave_SQL_Running 状态是否是Yes。如果都是yes那就成功了,在主数据库随便建一张表,然后去从库看是否自动生成了表。
注意从库数据只能进行查看操作,进行修改等操作会导致主从复制失败,需要重新使用change master to 语句,要先去主库查看Position的值在进行同步操作。
mysql> stop slave;
Query OK, 0 rows affected (0.01 sec)
mysql> change master to master_host='192.168.66.135',master_user='root',master_password='123456', master_log_file='binlog.000005',master_log_pos=154;
mysql> start slave;
mysql> show slave status\G;