主从复制整理

原理

(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, 就表示成功

你可能感兴趣的:(主从复制整理)