一、MySQL复制的应用常见场景
  • 读写分离,提高查询访问性能,有效减少主数据库访问压力。
  • 实时灾备,主数据库出现故障时,可快速切换到从数据库。
  • 数据汇总,可将多个主数据库同步汇总到一个数据库中,方便数据统计分析。
二、MySQL主从复制原理介绍
1、 MySQL异步和半同步复制传统的MySQL复制提供了一种简单的主-从复制方法。有一个主,以及一个或多个从。主节点执行和提交事务,然后将它们(异步地)发送到从节点,以重新执行(在基于语句的复制中)或应用(在基于行的复制中)。 这是一个shared-nothing(异步)的系统,默认情况下所有server成员都有一个完整的数据副本。(主节点不依赖从节点)
还有一个半同步复制,他在协议中添加了一个同步步骤,这意味着主节点在提交时需要等待从节点确认它已经接收到事务。只有这样,主节点才能继续提交操作。 上两张图片,可以看到传统一部MySQL复制协议(以及半同步)的图形展示。蓝色箭头表示在不同server之间或者server与client应用之间的信息交互。2、MySQL主从复制过程
  • 开启binlog日志,通过把主库的binlog传到从库,从新解析应用到从库。
  • 复制需要3个线程(dump、io、sql)完成
3、MySQL主从复制前提
  • 主服务器一定要打开二进制日志
  • 必须两台服务器(或者是多个实例)
  • 从服务器需要一次数据初始化
  • 如果主从服务器都是新搭建的话,可以不做初始化
  • 如果主服务器已经运行了很长时间了,可以通过备份将主库数据恢复到从库。
  • 主库必须要有对从库复制请求的用户。
  • 从库需要有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的请求。
4、MySQL主从复制实现2、MySQL复制有三种核心格式8、MySQL授权远程主机登录
grant all privileges on *.* to 'slave'@'192.168.%.%' identified by '123456' with grant option;
9、MySQL编辑配置文件9.1、master配置文件vim /etc/my.cnf
default-storage-engine=INNODBsymbolic-links=0server_id=6log_bin=/var/log/mysql/mysql-bin
9.1.2、创建相应文件夹以及更改属性
[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 ~]#
重启动数据库9.2、Slave配置文件vim /etc/my.cnf
default-storage-engine=INNODBsymbolic-links=0server_id=8log_bin=/var/log/mysql/mysql-binrelay_log=/var/log/mysql/mysql-relay
9.2.2、创建相应文件夹以及更改属性
[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 ~]#
重启动数据库10、MySQL创建主从同步账号
  • 在主库创建一个专门用来复制的数据库用户,所有从库都用这个用户来连接主库,确保这个用户只有复制的权限
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.sqlmysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.[root@localhost~]#mysql-uroot-p123456mysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.WelcometotheMySQLmonitor.Commandsendwith;or\g.YourMySQLconnectionidis3Serverversion:5.7.38-logMySQLCommunityServer(GPL)Copyright(c)2000,2022,Oracleand/oritsaffiliates.OracleisaregisteredtrademarkofOracleCorporationand/oritsaffiliates.Othernamesmaybetrademarksoftheirrespectiveowners.Type'help;'or'\h'forhelp.Type'\c'toclearthecurrentinputstatement.mysql>selectuser,hostfrommysql.user;+---------------+-------------+|user|host|+---------------+-------------+|slave|192.168.%.%||mysql.session|localhost||mysql.sys|localhost||root|localhost|+---------------+-------------+4rowsinset(0.01sec)mysql>

15、MySQL从库配置同步
  • 再从库上建立复制关系,即从库指定主库的日志信息和链接信息
mysql>changemasterto->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;QueryOK,0rowsaffected,2warnings(0.02sec)mysql>

注意这两个值需要根据主服务器上显示的值来写
master_log_file='mysql-bin.000003',master_log_pos=154;

在主服务器上输入一下命令即可显示出来关闭主从服务器防火墙和一些安全策略,不想关闭就启动从服务
mysql>startslave;QueryOK,0rowsaffected(0.02sec)mysql>

查看从的状态
mysql>showslavestatus\G***************************1.row***************************Slave_IO_State:WaitingformastertosendeventMaster_Host:192.168.126.133Master_User:slaveMaster_Port:3306Connect_Retry:60Master_Log_File:mysql-bin.000003Read_Master_Log_Pos:154Relay_Log_File:mysql-relay.000003Relay_Log_Pos:320Relay_Master_Log_File:mysql-bin.000003Slave_IO_Running:YesSlave_SQL_Running:Yes........Master_Server_Id:6Master_UUID:753763f0-c7a4-11ec-b29b-000c297f1d9eMaster_Info_File:/var/lib/mysql/master.infoSQL_Delay:0SQL_Remaining_Delay:NULLSlave_SQL_Running_State:Slavehasreadallrelaylog;waitingformoreupdatesMaster_Retry_Count:86400Master_Bind:Last_IO_Error_Timestamp:Last_SQL_Error_Timestamp:Master_SSL_Crl:Master_SSL_Crlpath:Retrieved_Gtid_Set:Executed_Gtid_Set:Auto_Position:0Replicate_Rewrite_DB:Channel_Name:Master_TLS_Version:1rowinset(0.00sec)mysql>

注意看红色部分,主从配置完成,如果是克隆的虚拟机注意查看server-uuid,主从的uuid是不一致的,需要自行修改。
[root@localhost~]#vim/var/lib/mysql/auto.cnf[auto]server-uuid=753763f0-c7a4-11ec-b29b-000c297f1d91

测试主服务起的数据能否同步到从服务器上在主服务器创建test_slave 数据库
mysql>createdatabasetest_slave;QueryOK,1rowaffected(0.01sec)mysql>showdatabases;+--------------------+|Database|+--------------------+|information_schema||mysql||performance_schema||sys||test_slave|+--------------------+5rowsinset(0.00sec)mysql>

在从服务器上查看,是否同步
mysql>showdatabases;+--------------------+|Database|+--------------------+|information_schema||mysql||performance_schema||sys||test_slave|+--------------------+5rowsinset(0.06sec)mysql>

从服务器也能看到test_slave 测试库,测试同步成功。



更多相关文章

  1. Android(安卓)Alert Dialog解决点击按钮对话框不关闭的问题
  2. Android绘图机制与处理技巧——Android图像处理之图形特效处理
  3. Android中解决图像解码导致的OOM问题
  4. Android中几种图像特效处理
  5. android使用SVG
  6. Android开发中Menu的理解
  7. android viewpager+fragment做主界面(超容易理解的demo!)
  8. Android(安卓)Nine Patch图片及按钮背景
  9. android中使用线程池和临时缓存优化网络图片加载

随机推荐

  1. Android Dex文件结构
  2. android文档笔记(1)
  3. Android新设备“购买力”排行榜:东北、西
  4. Android SDK Tools r24.2
  5. Android 动态获取文本宽度
  6. 【移动安全实战篇】————5、Android屏
  7. Android webview should overrideUrlLoad
  8. android lrucache使用
  9. Android通讯
  10. 状态开关按钮ToggleButton