您的位置:首页 > 数据库 > MySQL

MySQL Master-Slave Replication

2016-04-11 16:06 671 查看

环境介绍

VMware Workstation 12 虚拟机x2
(可以使用克隆,但是要在安装数据库之前克隆,安装之后克隆会出现相同UUID的情况,无法进行主从复制)

MySQL 5.7 Community 完全包下载地址:http://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.11-1.el7.x86_64.rpm-bundle.tar

安装MySQL

安装MySQL的过程不再赘述。安装完成后,启动MySQL服务,使用mysql_secure_installation进行配置时需要默认的root用户密码,密码在/var/log/mysqld.log. 查询password会找到默认的密码。

配置Master端

创建Slave用户

# mysql -u root -p
mysql> grant replication slave on *.* TO slave@'slave服务器的ip' identified by 'slave用户的密码';
mysql> flush privileges;
mysql> quit


修改/etc/my.cnf 加入

bind-address = 0.0.0.0
server-id = 1
log-bin = mysql-bin
binlog-ignore-db = "mysql"


重启MySQL服务器

#service mysqld restart


在主从复制前,要保证两端数据库状态,内容一致,如果主从两端均为新安装的服务器,可以忽略这步

# mysql -u root -p
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;


导出数据库至SQL脚本

# mysqldump -u root -p --databases 数据库1 数据库2 > /root/db_dump.sql


解除数据库Read Lock

# mysql -u root -p
mysql> UNLOCK TABLES;


把导出的SQL脚本传输到Slave端

scp /root/db_dump.sql [private-IP-of-db02]:/root/


配置Slave端

修改/etc/my.cnf 加入

bind-address = 0.0.0.0
server-id = 2


导入SQL脚本,并重启数据库(如果主从两端都是新安装的数据库可以忽略)

# mysql -u root -p < /root/db_dump.sql
# service mysqld restart


进入Slave端的MySQL命令行

mysql> SLAVE STOP;
mysql> CHANGE MASTER TO MASTER_HOST='Master端IP地址',
MASTER_PORT=端口号,
MASTER_USER='slave',
MASTER_PASSWORD='slave用户的密码'


启动Slave端

mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G


验证一下Master和Slave之前的数据是否被复制,在Master端

# mysql -u root -p
mysql> create database testing;
mysql> use testing
mysql> create table users(id int not null auto_increment, primary key(id), username varchar(30) not null);
mysql> insert into users (username) values ('foo');
mysql> insert into users (username) values ('bar');
mysql> exit


在Slave端

mysql> use testing;
mysql> select * from users;


应该能看到我们在Master端简历的表和数据了

Slave端无法更新数据

<span style="font-family: 'Microsoft YaHei';">mysql> stop slave;</span>
mysql> reset slave;
mysql> master change to master_host='10.1.18.100',master_port=3306,master_user='slave',master_password='Slave的密码',
master_log_file='master端当前的日志',master_log_pos=master日志的当前编号;
mysql> start slave;


修复后可能会造成数据和Master端不一致的情况,所以先清空Slave库,并用Master导出的数据库脚本进行重建,然后恢复Slave端的设置。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Linux MySQL