您现在的位置是:首页 > 正文

MySQL主从复制 最新发布

2024-01-30 21:55:37阅读 0

MySQL主从复制

主从复制(也称AB复制)允许将来自一个MySQL数据库服务器(主服务器)的数据复制到一个或多个MySQL数据库服务器(从服务器)。
根据配置,自己可以复制数据库中的所有数据库,所选数据库甚至选定的表。

主从复制原理

在这里插入图片描述
原理
主服务器上面的任何修改都会保存在二进制日志(bin-log日志)里面。
从服务器上面启动一个I/O线程,链接到主服务器上面请求读取二进制(bin-log)日志,然后把读取到的二进制日志写到本地的Realy-log(中继日志)里面。
从服务器上面同时开启一个SQL线程,读取Realy-log(中继日志),如果发现有更新的内容在本机的数据库上面执行一遍。

配置主从复制

配置hosts解析

# cat /etc/hosts
192.168.217.108 mysql-master
192.168.217.109 mysql-slave

1、编辑主库文件

添加配置 vim(vi) /etc/my.cnf
[mysqld]    #在配置文件里找到这个位置然后在[mysqld]的下面添加下面内容
log-bin=/var/log/mysql/mysql-bin # 二进制日志的位置
server-id=1   #主库从库的数字不要一样

2、创建日志目录并赋予权限

[root@mysql~]# mkdir /var/log/mysql
[root@mysql~]# chown mysql.mysql /var/log/mysql

3、重启服务

[root@mysql~]# systemctl restart mysqld

4、主库创建用户
主服务器上执行如下操作

#语法 grant 复制权限 on 库名.表名 to ‘用户名’@‘主机名’ identified by ‘密码’ ;
mysql>grant replication slave on  *.*  to 'att' @'%' identified by '123456';  
将复制的权限给用户
mysql>flush privileges;
查询权限列表

5、在从服务器上使用刚才创建的用户进行测试连接

[root@mysql~slalve~]# mysql -h192.168.217.108(mysql-master) -uatt -p'123456'
测试是否连通,连通退出即可,不要在这里执行任何操作

6、从库配置文件配置
my.cnf配置文件

[mysql] 
server-id=2
重启服务
systemctl restart mysqld

7、在主服务上操作
查看主服务器的binlog日志的名称和位置

mysql> show master status\G;
file: 指定binlog日志是哪个
position: 指定binlog的位置点

8、在从服务器的mysql中执行如下语句
进入从数据库

[root@mysql-slavel~]# mysql -uroot -p'root密码'
nysql>change master to #回车
 >master_host='mysql-master',  #回车
 >master_user='att',
 >master_password='123456',
 >master_log_file='myspl-bin.000001',
 >master_log_pos=466;
 
#master_host:  主服务器的主机名或是ip地址
#master_user: 主服务器的用户名,我自己设的是att 
#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

如下图
在这里插入图片描述
9、测试结果
主库,创建一个数据库,从库查看
create database hello;

show databases;

互为主从

把主从复制的步骤,反过来执行一遍,主也是从,从也是主。

网站文章