一、为什么要做主从复制
1、灾备
2、数据分布
3、负载平衡
4、读写分离
5、提高并发能力
二、主从复制的原理
1、master将数据变化记录到二进制日志中
2、slave 将master的二进制日志拷贝到slave 的中继日志中
3、slave 将中继日志中的事件再做一次 ,将数据变化反应到自身的数据库中
三、主从复制的的实现实战
环境准备:
两台主机,一主一从。
主库(mysql Master)IP:192.168.179.131 port:3306
从库(mysql Slave) IP: 192.168.179.135 port:3306
1、配置主库
(1)设置server-id值并开启binlog参数
[root@localhost ~]# vim /etc/my.cnf
到该文件的 [mysqld] 下添加下列两行内容
[mysqld]
log-bin=mysql-bin
server-id=131 #设置server-id,唯一即可
(2)重启数据库
[root@localhost ~]# systemctl restart mysqld.service
(3)建立同步账号
mysql> create user 'rep1'@'192.168.179.%' identified with mysql_native_password by 'redHat123!';
mysql> grant replication slave on *.* to 'rep1'@'192.168.179.%';
(4)查看主库状态,即当前日志文件名和二进制日志偏移量(配置从库时要用)
mysql> show master status;
(5)在主从主机上分别创建路径
mkdir /server/backup -p
(6)备份数据库数据(主库)
[root@localhost ~]# mysqldump -uroot -p -A -B | grep /server/backup/mysql_bak.2022-09-11.sql.gz
注:此时需要的是主机上的数据库密码
(7)解锁
mysql> unlock tables;
(8)将主库备份数据上传到从库
[root@localhost ~]# scp /server/backup/mysql_bak.2022-09-11.sql.gz 192.168.179.135:/server/backup
2、配置从库
(1)设置server-id值,并关闭binlog参数
[mysqld]
server_id = 136
(2)重启数据库
[root@localhost ~]# systemctl restart mysqld.service
(3)还原从主库备份的数据
[root@localhost backup]# gzip -d mysql_bak.2022-09-11.sql.gz
gzip: mysql_bak.2022-09-11.sql already exists; do you wish to overwrite (y or n)? y
[root@localhost backup]# mysql -uroot -p < mysql_bak.2022-09-11.sql
Enter password:
检查还原:
[root@localhost ~]# mysql -uroot -p -e 'show databases;'
(4)设定主从数据库同步
mysql> change master to MASTER_HOST='192.168.179.131', MASTER_PORT=3306, MASTER_USER='rep1', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000005', MASTER_LOG_POS=157;
开启slave:
mysql> start slave;
查看状态:
mysql> show slave status\G
slave_IO_Running和Slave_SQL_Running 都为yes时才算成功。