一、准备环境
1.两台linux服务器,Master主机IP地址为192.168.1.10;Slave从机IP地址为192168.1.11
2.mysql安装包
二、Master主机配置步骤
找到主服务器mysql的配置文件 windows(my.ini)、 linux(/etc/my.cnf),添加如下信息:
server-id=1
log_bin=master-bin
log_bin_index=master-bin.index
binlog_do_db=test
#server-id 服务器唯一标识。
#log_bin 启动MySQL二进制日志,即数据同步语句,从数据库会一条一条的执行这些语句。
#binlog_do_db 指定记录二进制日志的数据库,即需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可。
#binlog_ignore_db 指定不记录二进制日志的数据库,即不需要复制的数据库名,如果有多个数据库,重复设置这个选项即可。
#binlog_do_db和binlog_ignore_db为互斥选项,只需要一个即可。
信息添加好之后,需要重启mysql服务器
2 在主服务器创建从服务器的用户,用于连接主服务器,需要登录mysql才可以执行如下命令:
CREATE USER 'loafer'@'%' IDENTIFIED BY 'pass';
grant all privileges on *.* to 'loafer'@'%';
3 重启mysql 查看主服务器状态
SHOW MASTER STATUS;
注意:File与Position对应的值非常重要,需要在从服务器配置的时候用到
三、Slave主机配置步骤
1 找到从服务器mysql的配置文件 windows(my.ini) 、linux(/etc/my.cnf),如果是多个从机,从机的配置都一样,只有server-id的值不一样。
server-id=2
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
#replicate-do-db=test
#server-id 服务器唯一标识,如果有多个从服务器,每个服务器的server-id不能重复,跟IP一样是唯一标识,
如果你没设置server-id或者设置为0,则从服务器不会连接到主服务器。
#relay-log 启动MySQL二进制日志,可以用来做数据备份和崩溃恢复,或主服务器挂掉了,将此从服务器作为其
他从服务器的主服务器。
#replicate-do-db 指定同步的数据库,如果复制多个数据库,重复设置这个选项即可。若在master端不指定
binlog-do-db,则在slave端可用replication-do-db来过滤。
#replicate-ignore-db 不需要同步的数据库,如果有多个数据库,重复设置这个选项即可。
#replicate-do-db和replicate-ignore-db为互斥选项,只需要一个即可
2 重启mysql,连接master主服务器
change master to master_host='192.168.1.10',master_port=3306,master_user='loafer',master_password='pass',master_log_file='master-bin.000003',master_log_pos=155;
#192.168.1.10 主服务器ip
#loafer 主服务器创建的用户
#pass创建用户的密码
#master-bin.000003 是主机show master status显示的File列的值
#155 是主机show master status显示的Position列的值
3 启动 slave数据同步
#启动slave数据同步
mysql> start slave;
#停止slave数据同步(若有需要)
mysql> stop slave;
4 查看 slave信息,Slave_IO_Running和Slave_SQL_Running都为yes,则表示同步成功
show slave status\G
重点事项
若在主从同步的过程中,出现其中一条语句同步失败报错了,则后面的语句也不能同步成功了。例如,主库有一条数据,而从库并没有这一条数据,然而,在主库执行了更新操作,那么从库没有这么一条数据,从而报错了。在此时的从数据库的数据同步就失败了,因此后面的同步语句就无法继续执行。
四、测试
我们在主机上创建一个test1的数据库,分别执行创建表和插入数据的操作,看看从机能不能把主机的数据同步过来。
CREATE TABLE `t_users` (
`user_id` varchar(64) NOT NULL COMMENT '注册用户ID',
`user_email` varchar(64) NOT NULL COMMENT '注册用户邮箱',
`user_password` varchar(64) NOT NULL COMMENT '注册用户密码',
`user_nikename` varchar(64) NOT NULL COMMENT '注册用户昵称',
`user_creatime` datetime NOT NULL COMMENT '注册时间',
`user_status` tinyint(1) NOT NULL COMMENT '验证状态 1:已验证 0:未验证',
`user_deleteflag` tinyint(1) NOT NULL COMMENT '删除标记 1:已删除 0:未删除',
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO t_users(user_id,user_email,user_password,user_nikename,user_creatime,user_status,user_deleteflag)
VALUES('1','19168@qq.com','123455','zhangsan',NOW(),1,0);
INSERT INTO t_users(user_id,user_email,user_password,user_nikename,user_creatime,user_status,user_deleteflag)
VALUES('2','888888@qq.com','123455','lisi',NOW(),1,0);
SELECT * FROM t_users;
直接打开从机,我们会发现从机的test1数据库、t_users表和两条记录都同步过来了