大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
读写分离,提高查询访问性能,有效减少主数据库访问压力。 实时灾备,主数据库出现故障时,可快速切换到从数据库。 数据汇总,可将多个主数据库同步汇总到一个数据库中,方便数据统计分析。
1、 MySQL异步和半同步复制传统的MySQL复制提供了一种简单的主-从复制方法。有一个主,以及一个或多个从。主节点
执行和提交事务,然后将它们(异步地)发送到从节点,
以重新执行(在基于语句的复制中)或应用(在基于行的复制中)。这是一个shared-nothing(异步)的系统,默认情况下所有server成员都有一个完整的数据副本。
(主节点不依赖从节点)
半同步复制,他在协议中添加了一个同步步骤,这意味着
主节点在提交时需要等待从节点确认它已经接收到事务。只有这样,主节点才能继续提交操作。
-
开启binlog日志,通过把主库的binlog传到从库,从新解析应用到从库。
-
复制需要3个线程(dump、io、sql)完成
主服务器一定要打开二进制日志 必须两台服务器(或者是多个实例) 从服务器需要一次数据初始化 如果主从服务器都是新搭建的话,可以不做初始化 如果主服务器已经运行了很长时间了,可以通过备份将主库数据恢复到从库。 主库必须要有对从库复制请求的用户。 从库需要有relay-log设置,存放从主库传送过来的二进制日志show variables like ‘%relay%’; 在第一次的时候,从库需要change master to去连接主库。 change master信息需要存放到master.info 中show variables like ‘%master_info%’; 从库怎么知道,主库发生了新的变化?通过relay-log.info记录的已经应用过的relay-log信息。 在复制过程中涉及到的线程
从库会开启一个I0 thread(线程),负责连接主库,请求binlog, 接收binlog并写入relay-log。 从库会开启一个SQL thread(线程),负责执行relay-log中的事件。 主库会开启一个dump thrad(线程),负责响应从I0 thread的请求。
grant all privileges on *.* to ‘slave’@’192.168.%.%’ identified by ‘123456’ with grant option;
default-storage-engine=INNODBsymbolic-links=0server_id=6log_bin=/var/log/mysql/mysql-bin
[root@localhost ~]# mkdir -p /var/log/mysql[root@localhost ~]# chown -R mysql.mysql /var/log/mysql[root@localhost ~]# ll -d /var/log/mysqldrwxr-xr-x. 2 mysql mysql 203 4月 29 16:22 /var/log/mysql[root@localhost ~]#
default-storage-engine=INNODBsymbolic-links=0server_id=8log_bin=/var/log/mysql/mysql-binrelay_log=/var/log/mysql/mysql-relay
[root@localhost ~]# mkdir -p /var/log/mysql[root@localhost ~]# chown -R mysql.mysql /var/log/mysql[root@localhost ~]# ll -d /var/log/mysqldrwxr-xr-x. 2 mysql mysql 203 4月 29 16:22 /var/log/mysql[root@localhost ~]#
-
在主库创建一个专门用来复制的数据库用户,所有从库都用这个用户来连接主库,确保这个用户只有复制的权限
create user ‘slave’@’192.168.%.%’ identified by ‘123456’;
SHOW VARIABLES LIKE ‘validate_password%’;
set global validate_password_length=4;
set global validate_password_policy=0;
delete from mysql.user where user =’用户名’;
select user,host from mysql.user;
grant replication slave on *.* to ‘slave’@’192.168.%.%’;
show grants for ‘slave’@’192.168.%.%’;
systemctl stop firewalld
mysql -h192.168.126.133 -uslave -p
mysqldump -uroot -p123456 –master-data –all-databases > master.sql
scp master.sql 192.168.126.132:/root
[root@localhost ~]# mysql -p123456 < master.sql
[root@localhost ~]# mysql -p123456 < master.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@localhost ~]# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.38-log MySQL Community Server (GPL)
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> select user,host from mysql.user;
+---------------+-------------+
| user | host |
+---------------+-------------+
| slave | 192.168.%.% |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+-------------+
4 rows in set (0.01 sec)
mysql>
-
再从库上建立复制关系,即从库指定主库的日志信息和链接信息
mysql> change master to
-> master_host='192.168.126.133',
-> master_port=3306,
-> master_user='slave',
-> master_password='123456',
-> master_log_file='mysql-bin.000003',
-> master_log_pos=154;
Query OK, 0 rows affected, 2 warnings (0.02 sec)
mysql>
master_log_file='mysql-bin.000003',
master_log_pos=154;
mysql> start slave;
Query OK, 0 rows affected (0.02 sec)
mysql>
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.126.133
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 154
Relay_Log_File: mysql-relay.000003
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
........
Master_Server_Id: 6
Master_UUID: 753763f0-c7a4-11ec-b29b-000c297f1d9e
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)
mysql>
,如果是克隆的虚拟机注意查看
server-uuid,主从的uuid是不一致的,需要自行修改。
[root@localhost ~]# vim /var/lib/mysql/auto.cnf
[auto]
server-uuid=753763f0-c7a4-11ec-b29b-000c297f1d91
test_slave 数据库
mysql> create database test_slave;
Query OK, 1 row affected (0.01 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test_slave |
+--------------------+
5 rows in set (0.00 sec)
mysql>
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test_slave |
+--------------------+
5 rows in set (0.06 sec)
mysql>
test_slave 测试库,测试同步成功。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/170321.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...