一、部署mysql
如果小伙伴还没有部署过请查看:
(20条消息) Mysql5.7 二进制 部署_趴着的猫的博客-CSDN博客 进步部署。
二、主从复制原理
Master 开启bin-log 二进制日志,并将增删改操作写入日志
Slave 开启slave,start slave,启动 I/O 线程和SQL线程,I/O线程向主库请求更新的bin-log
bin-log dump 线程发送bin-log的内容。在读取bin-log中的操作时,此线程会对主节点上的bin-log加锁,当读取完成,甚至在发动给从节点之前,锁会被释放
I/O线程接收到主节点binlog dump 进程发来的更新之后,保存在本地relay-log中
SQL线程负责读取relay log中的内容,解析成具体的操作并执行,最终保证主从数据的一致性
三、 主从复制的优势
降低主库I/O压力
实现高可用HA
数据实时备份
四、部署
主库 设置server-id 开启bin-log,创建从(slave)用户
vim /etc/my.cnf
server-id=353306 #这里我设置的是ip+端口号,该值不能重复!!
log-bin=mysql-bin #开启二进制日志
/etc/init.d/mysqld restart #重启mysql
mysql> create user 'slave'@'192.168.76.129' IDENTIFIED BY '!QAZ2wsx'; #创建slave 用户
Query OK, 0 rows affected (0.06 sec)
mysql> grant replication slave on *.* to 'slave'@'192.168.76.129'; #给slave 用户授权
Query OK, 0 rows affected (0.01 sec)
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
从库 设置my.cnf 文件,创建 MASTER 并启动
vim /etc/my.cnf
server-id=293306
relay-log=mysql-relay-log #开启中继日志
read-only=1 #将从库设置为只读状态
log-bin=mysql-bin #开启二进制日志
log_slave_updates=1 #slave数据库是否把从master接受到的log并在本slave执行的内容记录到slave的二进制日志中
/etc/init.d/mysqld restart #重启mysql
mysql> CHANGE MASTER TO
MASTER_HOST='192.168.76.135',MASTER_USER='slave',MASTER_PASSWORD='!QAZ2wsx',master_log_file='mysql-bin.000001',master_log_pos=154;
Query OK, 0 rows affected, 2 warnings (0.29 sec)
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
mysql> reset slave; #如果change master 有打错,需要先执行 stop slave 然后执行 reset slave 在重新进程 change master
两个线程等于yes 主从搭建完毕,创建库和表无问题。
五、注意事项
1、关闭防火墙或放开mysql端口
2、两个服务器时间要一致
3、从库尽量不要执行插入语句