Mysql主从复制
一、主从复制
1、主从复制作用
主从复制:主设备通过二进制日志传输到从设备,从设备通过二进制日志和主同步数据。
作用:负载均衡读操作,备份(实时备份,不能替换手动的备份),高可用和故障切换,数据分布,Mysql升级。
2、主从复制原理
1主节点负责用户的写操作,用户发起写操作后,会修改数据库
2.数据库修改后,会更新主节点上的二进制日志
3.主服务器会产生一个 dump线程, 一边读取二进制日志
一边将二进制日志通过 网络传给从服务器
4.从服务器会开启io线程,接收主服务器的二进制日志
5 如果数据量较大,不会存在内存中 ,会写入中继日志,这时只是生成
了一个文件,并没有同步
6.从服务器再开启 sql线程将 中继日志中 操作写入数据库完成更新
MySQL主从复制实战
master:192.168.10.136 server_id=120
slave:192.168.10.135 server_id=130
实验之前得保证两台机器能够通过ssh远程连接
关闭2台服务器的firewalld以及selinux,重置mysql密码为Admin@123
[root@localhost ~]#vim /etc/my.cnf
#修改文件
[mysqld]
server_id=100
log-bin=/data/mysql/mysql-bin
[root@localhost ~]#mkdir /data/mysql/ -p
#建立文件夹
[root@localhost ~]#chown mysql.mysql /data/ -R
#注意修改权限
[root@localhost ~]#systemctl restart mysqld
mysql -uroot -p'Admin@123'
主节点配置
vim /etc/my.cnf
[mysqld]下一行添加内容:
server_id=11
#serverid建议配置为ip地址最后8位
log-bin=/data/mysql/mysql-bin
#指定二进制日志文件保存位置为/data/mysql/,保存后退出
mkdir -p /data/mysql
#创建保存二进制文件的目录
chown mysql:mysql -R /data/
#目录的属主属组都给到mysql用户
systemctl restart mysqld
#重启数据库
mysql -uroot -p'Admin@123'
#登录数据库
grant replication slave on *.* to test@'192.168.30.%' identified by 'Admin@123';
#创建复制用户只要是192.168.30开头的地址都可使用用户名test密码Admimin@123登录数据库。
show master status;
#查看主从复制从那个二进制日志的那个初始节点开始,从服务器配置需要依赖此条查看结果,如下图
从节点配置
vim /etc/my.cnf
[mysqld]下一行添加内容:
server_id=12
#serverid建议配置为ip地址最后8位
log-bin=/data/mysql/mysql-bin
#指定二进制日志文件保存位置为/data/mysql/
relay-log=relay-log-bin#开启中继日志
relay-log-index=slave-relay-bin.index#添加,定义中继日志文件的位置和名称,保存后退出
mkdir -p /data/mysql
#创建保存二进制文件的目录
chown mysql:mysql -R /data/
#目录的属主属组都给到mysql用户
systemctl restart mysqld
#重启数据库
mysql -uroot -p'Admin@123'
#登录数据库
help change master to
#可以查看配置帮助复制出来修改,或直接复制下面模板
CHANGE MASTER TO
MASTER_HOST='192.168.30.11',
#主服务器主机ip
MASTER_USER='test',
#主从复制登录用户名
MASTER_PASSWORD='Admin@123',
#主从复制登录用户名的密码
MASTER_PORT=3306,
#主服务器数据库端口
MASTER_LOG_FILE='mysql-bin.000001',
#从那个二进制日志开始复制,show master status;看到的结果
MASTER_LOG_POS=448;
#从二进制日志的那个at节点开始复制,show master status;看到的结果
start slave;
#开启主从复制
show slave status\G
#查看主从复制状态,找到Slave_IO_Running: Yes Slave_SQL_Running: Yes 此2个参数为yes则主从复制开启完成。
实验结果
主数据库:
create databases test1;
#创建一个test1测试库
备数据库:
show databases;
#查看是否同步到test1库