主从复制原理:
主服务器开启一个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