原理
(master 主服务器 slave 从服务器)
master开启bin-log功能,日志文件用于记录数据库的读写增删,需要开启3个线程,master IO线程,slave开启 IO线程 SQL线程,Slave 通过IO线程连接master,并且请求某个bin-log,position之后的内容。
MASTER服务器收到slave IO线程发来的日志请求信息,io线程去将bin-log内容,position返回给slave IO线程。
slave服务器收到bin-log日志内容,将bin-log日志内容写入relay-log中继日志,创建一个master.info的文件,该文件记录了master ip 用户名 密码 master bin-log名称,bin-log position。
slave端开启SQL线程,实时监控relay-log日志内容是否有更新,解析文件中的SQL语句,在slave数据库中去执行。
准备两台虚拟机安装MySQL5.7版本作为主服务器和从服务器
配置主服务器
1.主服务器启用二进制日志记录并配置唯一的服务器ID(重启服务)
修改 /etc/my.cnf 配置文件
[mysqld]
log-bin=/var/log/mysql/mysql-bin
server-id=1
创建日志目录并赋予权限
[root@localhost ~]# mkdir /var/log/mysql/
[root@localhost ~]# chown -R mysql.mysql /var/log/mysql/
[root@localhost ~]# systemctl restart mysqld
注意:
如果省略server-id(或将其显式设置为默认值0),则主服务器拒绝来自从服务器的任何连接。
为了在使用带事务的InnoDB进行复制设置时尽可能提高持久性和一致性,
您应该在master my.cnf文件中使用以下配置项:
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1
确保未在复制主服务器上启用skip-networking选项。
如果已禁用网络,则从站无法与主站通信,并且复制失败。
2.进入数据库,建用户赋予权限
mysql> grant replication slave on *.* to 'repl'@'%' identified by 'Www.2.com';
mysql> flush privileges;
3.在从服务器上测试能否登录
[root@localhost ~]# mysql -urepl -pWww.2.com -h192.168.157.151
主服务器中有数据
1.导出数据
[root@localhost ~]# mysqldump -uroot -pWww.2.com --all-databases --mastert-data=1 > qbdump.db
2.从主服务器中使用 scp 或 rsync 等工具,把备份出来的数据传输到从服务器中
scp qbdump.db [email protected]:/root/
配置从服务器
1.修改 /etc/my.cnf 配置文件
[mysqld]
server-id=2
[root@localhost ~]# systemctl restart mysqld
2.导入数据
[root@localhost ~]# mysql -uroot -pWww.2.com < qbdump.db
3.在从服务器查看导入的数据
[root@localhost ~]# vim qbdump.db
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=154;
4.在从服务器上配置连接到主服务器的相关信息
[root@localhost ~]# mysql -uroot -pWww.2.com
mysql> change master to
-> master_host='192.168.157.151',
-> master_user='repl',
-> master_password='Www.2.com',
-> master_log_file='mysql-bin.000002',
-> master_log_pos=154;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
5.启动从服务器的复制线程以开始复制
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
6.查看是否成功
mysql> show slave status\G
输出结果中看到i/o线程和sql线程都是 yes, 就表示成功