mysql的主从复制之一主一从
准备两台mysql服务器node01和node02,这里我配置node01为主库(master),node02为从库(slave)。
1、在node01上修改/etc/my.cnf的文件
在my.cnf中的[mysqld]下面增加下面配置:这里需要注意server-id需要和其他mysql配置的不一样。
server-id=1
log-bin=mysql-bin
binlog-ignore-db=mysql
binlog-ignore-db=information-schema
binlog-do-db=duck
binlog_format=statement
2、在node02上修改/etc/my.cnf文件
在my.cnf中的[mysqld]下面增加下面配置:这里需要注意server-id需要和其他mysql配置的不一样。
server-id=2
relay-log=mysql-relay
3、两台服务器都配置完成后分别重新启动mysql服务
在shell窗口中输入下面命令进行重启服务:
service mysqld restart
4、在node01上创建账户并授权slave
登录node01的mysql并通过下面的SQL进行创建账号并且授权slave:
grant replication slave on *.* to 'root'@'%' identified by '123456';
set global validate_password_policy=0;
set global validate_password_length=1;
5、查看master的状态
通过下面SQL命令可以查看到主库的bin-log信息,主要包括文件名称,文件位置,库名,忽略的库名等
show master status
6、在node02上配置需要复制的主机
在node02上面配置主库服务器的IP,访问的用户名称,用户密码,访问的bin-log名称,还有文件位置。(需要根据步骤五中查询到的信息进行配置)
CHANGE MASTER TO MASTER_HOST='192.168.1.106',MASTER_USER='root',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=2488;
7、在node02上启动从服务器复制功能
start slave;
8、查看从服务器状态
show slave status\G
经过前面8个步骤后,观察两个关键的属性Slave_IO_Running,Slave_SQL_Running,当这两个属性都是yes的时候,表示主从复制已经准备好了,可以进行具体的操作了。如果上面有任何一个是no的则重置slave/master,并且重新配置。
补充项:
停止slave命令:
stop slave;
重置slave:
reset slave;
重置master:
reset master;
重置完成后继续重复步骤1-8即可。直到成功为止。
常见异常:
由于我们经常都是通过虚拟机备份镜像来快速搭建第二台mysql服务,这个时候就会导致mysql的UUID是相同的情况,就会出现异常:Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. 解决办法:修改auto文件中的uuid与其它mysql的不一样即可。
vi /var/lib/mysql/auto.cnf
主从复制验证
- 在上面node01(master库)中创建一个表:
create table test(name varchar(32));
- 到node02(slave库)中查看是否自动同步创建了test表。
- 在上面node01(master库)中的test表中插入一条数据:
insert into test values ('zhangsan');
- 到node02(slave库)中查看是否自动同步插入了一条数据。
|