主从复制

MySQL 主从复制

老师笔记

Replication 的原理

image

主服务器上面的任何修改都会通过自己的 I/O tread(I/O 线程)保存在二进制日志 Binary log 里面。
从服务器上面也启动一个 I/O thread,通过配置好的用户名和密码, 连接到主服务器上面请求读取二进制日志,然后把读取到的二进制日志写到本地的一个Realy log(中继日志)里面。
从服务器上面同时开启一个 SQL thread 定时检查 Realy log(这个文件也是二进制的),如果发现有更新立即把更新的内容在本机的数据库上面执行一遍。

配置 Replication

1.在主服务器上,您必须启用二进制日志记录并配置唯一的服务器ID。需要重启服务器,如果省略server-id(或将其显式设置为默认值0),则主服务器拒绝来自从服务器的任何连接。为了在使用带事务的InnoDB进行复制设置时尽可能提高持久性和一致性,应该在主服务器(master)的 my.cnf文件中使用以下配置项:

[mysqld]
log-bin=/var/log/mysql/mysql-bin
server-id=1
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1

2.创建日志目录并赋予权限,重启服务

 mkdir /var/log/mysql
 chown mysql.mysql /var/log/mysql
systemctl restart mysqld

3.应该创建一个专门用于复制数据的用户
每个从服务器需要使用MySQL 主服务器上的用户名和密码连接到主站,例如,计划使用用户 repl 可以从任何主机上连接到 master 上进行复制操作, 并且用户 repl 仅可以使用复制的权限。
在 主服务器 上执行如下操作

mysql> GRANT REPLICATION SLAVE ON *.*  TO  'repl'@'%'  identified by 
 'QFedu123!';

 mysqldump  -u用户名  -p密码  --all-databases  --master-data=1 > dbdump.db
                         =1 dump文件中含有主服务器二进制日志的文件名和位置
                       =2 也有上面提到的信息,但是,语句是被注释的状态

4.在从服务器上使用刚才的用户进行测试连接

// my.cnf 文件
[mysqld]
server-id=2
重启
mysql -urepl -p'QFedu123!'

/导入数据/

  方式一:mysql> source   dbdump.db
 方式二: MySQL -u -p  < dbdump.db 
/配置复制通道/

CHANGE MASTER TO
MASTER_HOST='10.0.122.85',
MASTER_USER='repl',
MASTER_PASSWORD='QFedu123!',
方式二必须加这两个
(MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=437;)

mysql> start slave;
Query OK, 0 rows affected (0.09 sec)

mysql> show slave status\G

输出结果中应该看到 I/O 线程和 SQL 线程都是  YES, 就表示成功。

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