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;
互为主从
把主从复制的步骤,反过来执行一遍,主也是从,从也是主。