主从复制(bin-log)


主从复制原理:

主服务器开启一个I/O进程,同时把自己的操作保存到binlog日志里面,从服务器上面也启动一个I/O进程,通过配置好的用户和密码,连接并读取主服务器binlog日志,然后把它写入到realy log(中继日志)里面,从服务器(slave)会开启一个SQL进程定时检查realy log,如果发现有新数据,再把新的数据在自己的数据库里执行一遍。


准备两台机器,关闭防火墙和selinux。---机器环境必须一致。时间也得一致

两台机器配置hosts解析

192.168.46.15 master

192.168.46.16 slave

开始配置主服务器

[root@master ~]# systemctl start mysqld    --开启

[root@master ~]# systemctl enable mysqld  --设置为开机自启

1.在主服务器上,必须启用二进制日志记录并配置唯一的服务器ID。需要重启服务器。 编辑主服务器的配置文件 my.cnf ,添加如下内容

添加配置

[mysqld]

log-bin=/var/log/mysql/mysql-bin

server-id=1

创建bin-log日志目录并赋予权限

[root@master ~]# mkdir /var/log/mysql

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

重启一下服务

[root@master ~]# systemctl restart mysqld

登录mysql创建同步用户

[root@master ~]# mysqladmin -uroot -p'123'          --实验所有密码,一切从简

创建主从同步的用户:

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

mysql> flush privileges;

查看主状态

mysql> show master status\G

配置从服务器

配置文件my.cnf

[mysqld]

server-id=2

重启服务

[root@slave ~]# systemctl restart mysqld

登录mysql

mysql> CHANGE MASTER TO

-->MASTER_HOST='master',  //主服务器ip

-->MASTER_USER='repl',   //主服务器用户

-->MASTER_PASSWORD='Aa@123.',   //用户密码

-->MASTER_PORT=3306,   //端口

-->MASTER_LOG_FILE='mysql-bin.00001',   //binlog日志文件名称

-->MASTER_LOG_POS=4  //日志位置

-->;

启动slave,查看从状态

mysql> start slave;

mysql> show slave status\G

查看下面两行数据是否为yes

Slave_IO_Runing:  Yes

Slave_SQL_Runing:  Yes

在master上面执行:

mysql> create database testdb;       #创建一个库

Query OK, 1 row affffected (0.10 sec)

mysql> \q

看看从库上是否同步


总结

主从复制

主服务器配置

开启二进制日志

设置 server-id

给从服务器授权

两种情况:

1.主服务器中没有原来的数据

重启 MySQL 服务

2. 主服务器有原来的数据

备份出来原来的数据,用于把这些数据导入到从服务器中

可以保证此时主和从的数据是一致的。

(原因:开启二进制日志只会记录开启之后的数据更改语句)

mysqldump -A --master-data  > all.sql

从服务器配置

关闭防火墙和 SELinux

配置  server-id

假入有数据,导入数据

重启服务

配置连接到 master 的信息

启动 slave

start slave

查看状态

show slave status\G

---------------------------

Slave_IO_Running: Yes

Slave_SQL_Running: Yes




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