1、 MySQL异步和半同步复制 传统的MySQL复制提供了一种简单的主-从复制方法。有一个主,以及一个或多个从。 主节点执行和提交事务,然后将它们(异步地)发送到从节点,以重新执行(在基于语句的复制中)或应用(在基于行的复制中)。 这是一个shared-nothing(异步)的系统,默认情况下所有server成员都有一个完整的数据副本。(主节点不依赖从节点)
还有一个半同步复制,他在协议中添加了一个同步步骤,这意味着主节点在提交时需要等待从节点确认它已经接收到事务。只有这样,主节点才能继续提交操作。
上两张图片,可以看到传统一部MySQL复制协议(以及半同步)的图形展示。蓝色箭头表示在不同server之间或者server与client应用之间的信息交互。
grant all privileges on *.* to 'slave'@'192.168.%.%' identified by '123456' with grant option;
9.1、master配置文件
vim /etc/my.cnf
default-storage-engine=INNODB symbolic-links=0 server_id=6 log_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/mysql drwxr-xr-x. 2 mysql mysql 203 4月 29 16:22 /var/log/mysql [root@localhost ~]#
重启动数据库
vim /etc/my.cnf
default-storage-engine=INNODB symbolic-links=0 server_id=8 log_bin=/var/log/mysql/mysql-bin relay_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/mysql drwxr-xr-x. 2 mysql mysql 203 4月 29 16:22 /var/log/mysql [root@localhost ~]#
重启动数据库
create user 'slave'@'192.168.%.%' identified by '123456';
如果出现密码不符合要求的问题则按以下解决
修改密码的策略,使得可以设置简单的密码
如果想要查看MySQL完整的初始密码规则,登陆后执行以下命令
SHOW VARIABLES LIKE 'validate_password%';
密码的长度是由validate_password_length决定的,但是可以通过以下命令修改
set global validate_password_length=4;
validate_password_policy决定密码的验证策略,默认等级为MEDIUM(中等),可通过以下命令修改为LOW(低)
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
再从服务器上使用slave账户远程连接主服务器
mysql -h192.168.126.133 -uslave -p
连接成功
查看MySQL主服务器的状态
show master status;
13、MySQL主库备份数据
mysqldump -uroot -p123456 --master-data --all-databases > master.sql
将备份的文件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 测试库,测试同步成功。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。