### Mysql-replication(主从复制)
概念:主从复制AB复制,允许将来自一个Mysql数据库服务器(主服务器)的数据复制到一个或多个Mysql数据库服务器(从服务器)
根据配置,您可以复制数据库中的所有数据库,所选数据库甚至选定的表
Mysql主从复制优点:
1.横向策略,可以添加多台从服务器。主服务器负责写入和更新。从服务器复制,提高读取速度。
2.数据安全。主服务器宕机,从服务器可顶替主服务器继续工作
3.分析数据
4.备份,减轻主服务器压力
*Replication原理:*
主服务器上边的任何修改都会保存在二进制日志(Bin-log)日志里面*
*从服务器上面启动一个I/O线程,连接到主服务器上面请求读取二进制日志,将读取的二进制日志写在本地的Realy-log(中继日志)里面。*
*开启SQL线程,读取中继日志Realy-log,发现有更新立即把更新内容在本机的数据库上边执行一遍*
执行步骤:
1.在主从服务器上进行解析:
例:主服务器: 192.168.1.2 mysql-master
从服务器: 192.168.1.3 mysql-slave
分别加入到两台服务器的解析中:
vim /etc/hosts
192.168.1.2 mysql-master
192.168.1.3 mysql-slave
2.开启主服务器二进制日志并配置唯一的服务器ID:指定日志位置并授予权限,重启主服务器数据库服务
vim /etc/my.cnf
[mysqld]
log-bin=/var/log/mysql/mysql-bin
server-id=1
mkdir /var/log/mysql/
chown mysql.mysq /var/log/mysql
systemctl restart mysqld
从服务器:开启server-id =2
3.主服务器:创建用户授予复制的权限
grant replication slave on * . * to 'repl'@'%' identified by '123'
4.从服务器进行测试:
mysql -urepl -p'123' -h mysql-master
5.主服务器查看: show master status \G;
6.从服务器执行:
[root@mysql-slave1 ~]# mysql -uroot -p'dY3K2((y/hhk'
mysql> CHANGE MASTER TO
MASTER_HOST='mysql-master',
MASTER_USER='repl',
MASTER_PASSWORD='123',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=681;
#MASTER_HOST: 主服务器的主机名或者是ip地址
#MASTER_USER: 主服务器的用户名,我们设置的是repl
#MASTER_PASSWORD: 密码
#MASTER_LOG_FILE:日志文件是哪个
#MASTER_LOG_POS:日志的位置
mysql> start slave; # 主服务器不需要启动
mysql> show slave status\G # 均为yes即可
Slave_IO_Running: Yes
Slave_SQL_Running: Yes