当前位置: 首页 > news >正文

深圳专业的免费建站wordpress 炫酷主题

深圳专业的免费建站,wordpress 炫酷主题,西安网页设计培训费用,深圳比较出名的外贸公司文章目录 1.MySQL主从复制集群的核心概念1.1.什么是主从复制集群1.2.主从复制集群中的专业术语1.3.主从复制集群工作原理1.4.主从复制中的小细节1.5.搭建主从复制集群的前提条件1.6.MySQL主从复制集群的架构信息 2.搭建MySQL多实例环境2.1.在mysql-1中搭建身为主库的MySQL实例2… 文章目录 1.MySQL主从复制集群的核心概念1.1.什么是主从复制集群1.2.主从复制集群中的专业术语1.3.主从复制集群工作原理1.4.主从复制中的小细节1.5.搭建主从复制集群的前提条件1.6.MySQL主从复制集群的架构信息 2.搭建MySQL多实例环境2.1.在mysql-1中搭建身为主库的MySQL实例2.2.在mysql-2中搭建MySQL多实例2.2.1.安装数据库软件2.2.1.搭建第一个3306从库的MySQL实例2.2.2.搭建第二个3307从库的MySQL实例 2.3.MySQL多个节点搭建完毕 3.配置MySQL主从复制集群3.1.在主库开启Binlog二进制日志3.2.在主库上创建主从复制的用户3.3.将主库数据备份并在从库中进行还原3.4.配置从库连接主库的复制信息3.5.启动主从复制线程 4.查看主从复制集群状态 1.MySQL主从复制集群的核心概念 1.1.什么是主从复制集群 主从复制是指将主数据库的 DDL 和 DML 操作通过二进制日志传到从库服务器中然后在从库上对这些日志重新执行也叫重做从而使得从库和主库的数据保持同步。 MySQL支持一台主库同时向多台从库进行复制 从库同时也可以作为其他从服务器的主库实现链状复制。 MySQL 复制的优点主要包含以下三个方面 主库出现问题可以快速切换到从库提供服务。实现读写分离降低主库的访问压力。可以在从库中执行备份以避免备份期间影响主库服务。 1.2.主从复制集群中的专业术语 在MySQL主从复制集群中主要分为两大部分文件、线程。 文件 主库 Binlog二进制日志。 从库 relay-log中继日志主库推送过来的Binlog日志都存放在中继日志中。master.info从库复制主库的信息文件记录着主库的地址、用户、Binlog等信息。relay-log.info中继日志的信息文件该文件记录了上次执行relay-log的位置等信息。 线程 主库 binlog_dump_thread二进制日志投递线程主要将二进制日志发送给从库的线程。 从库 IO_Thread从库的IO线程用于请求和接收主库的Binlog二进制日志。SQL_Thread从库的SQL线程用于将主库发来的二进制日志在数据库中进行数据复制。 1.3.主从复制集群工作原理 MySQL主从复制集群的工作原理主要围绕前面提到的文件和线程。 MySQL主从复制集群的原理 1首先从库执行change master to将连接主库的配置信息记录到master.info文件中此时从库上会开启两个线程I/O线程和SQL线程。 2从库上的I/O线程会从master.info文件中读取主库的连接信息。 3从库I/O线程获取到主库的信息后会与主库进行身份认证然后建立连接。 4当从库I/O线程成功连接到主库后主库会立即给从库分配一个binlog_dump_thread线程用于推送Binlog日志到从库。 5从库I/O线程会根据master.info中记录的Binlog信息Binlog日志文件、标识位号与主库的binlog_dump_thread线程请求最新的Binlog日志。 6这时主库的binlog_dump_thread线程就会去查询是否产生了新的Binlog日志如果产生了新的Binlog日志会截取最新的Binlog日志然后推送给从库的I/O线程。 7从库的I/O线程接收到主库推送的Binlog日志后会现将其存放在内存的TCP/IP缓存中然后告知主库的binlog_dump_thread线程Binlog日志已收到。 8此时从库的I/O线程会去更新master.info文件中的Binlog位置点信息记录最新的Binlog标识号。 9然后从库的I/O线程会将主库推送的Binlog日志写入到磁盘上的relay-log文件中。 10最后由从库的SQL线程读取relay-log.ifno文件获取relay-log最新的位置点然后根据的位置点去relay-log中执行最新的Binlog日志执行完成后会再次更新relay-log.info文件中记录的relay-log位置点。 这就是完整的主从复制工作原理。 简单来说MySQL主从复制的原理就是从库的I/O线程读取连接主库的配置信息然后去连接主库开始主从同步当I/O线程连接上主库后主库会立即给I/O线程分配一个Dump线程用于推送Binlog日志到从库此时I/O线程会根据master.info文件中记录的Binlog信息向主库的Dump线程请求最新的BInlogDump线程查询到有最新的Binlog产生会将最新的Binlog截取然后推送给从库的I/O线程I/O线程收到Binlog日志后将其存放在内存的TCP/IP缓存中然后更新master.info文件中最新的Binlog信息紧接着将Binlog日志写入到relay-log中最后由从库的SQL线程从relay-log.info中读取relay-log的位置号然后执行relay-log中最新的Binlog日志执行完成后再次更新relay-log.info中的relay-log位置号以便于下次再relay-log中读取最新的Binlog日志。 relay-log日志会通过MySQL中的其他线程定期清理。 1.4.主从复制中的小细节 从上面说的主从复制原理来看好像每次都是从库向主库去请求新数据那么什么时候从库才应该向主库请求呢请求的频率如何 其实是这样的当主库上产生了新的事务更新到Binlog日之后会给binlog_dump_thread线程发送一个“信号”binlog_dump_thread线程会与从库的I/O线程一直建立连接binlog_dump_thread线程就会通知从库的I/O线程有新数据产生了这时从库的I/O线程就带着master.info中记录的最新Binlog标识位号向binlog_dump_thread线程请求最新的Binlog然后完成数据同步。 MySQL主从复制第一次复制时是按照上面说到的10步完成的第二次复制时只需要等待主库的binlog_dump_thread线程向从库的I/O线程发送信号然后I/O线程去请求最新的Binlog最后由SQL线程复制数据即可。 1.5.搭建主从复制集群的前提条件 搭建MySQL主从复制集群的前提条件如下 首先需要准备多个MySQL实例最少两个MySQL实例能够实现一主一从的架构可以在多个服务器中分布部署独立的MySQL节点也可以在一台服务器中部署多个MySQL实例。每个MySQL实例都需要由单独的sever_id。身为主库角色的MySQL实例需要开启二进制日志从库在特定场景下需要开启。主库需要授权一个专门的用户作为主从复制的用户。如果主库是一个运行很多年的数据库突然要升级为主从复制集群最好先将主库的数据同步一份到从库中。开启专用的复制线程。 1.6.MySQL主从复制集群的架构信息 本次主从复制的架构是一主两从的结构。 IP主机名端口角色server_id192.168.20.11mysql-13306主库1192.168.20.12mysql-23306从库2192.168.20.12mysql-23307从库3 2.搭建MySQL多实例环境 再搭建MySQL主从复制集群之前首先搭建出多个MySQL实例由于服务器有限因此通过两台机器模拟出一主两从的环境。 主从复制集群中有一个节点开启了gtid所有的节点都需要开启gtid否则主从将不能同步。 2.1.在mysql-1中搭建身为主库的MySQL实例 mysql-1服务器中的3306端口的MySQL实例再前面已经搭建完成了就是我们一直在使用的数据库实例里面有数据更加方便演示主从集群下面只是提供一下搭建过程的步骤。 注意每个MySQL节点的server_id都要设置成不同的如果你的一主两从都是单独在不同服务器中部署的那么直接参考本小结的数据库实例安装即可不用再看多实例的步骤了。 1.解压MySQL [rootmysql-1 ~]# tar xf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz -C /usr/local/ [rootmysql-1 ~]# mv /usr/local/mysql-5.7.36-linux-glibc2.12-x86_64 /usr/local/mysql2.设置MySQL的环境变量 [rootmysql-1 ~]# vim /etc/profile export MYSQL_HOME/usr/local/mysql export PATH$MYSQL_HOME/bin:$PATH export LD_LIBRARY_PATH:/usr/local/mysql/lib3.创建mysql用户 [rootmysql-1 ~]# groupadd -r mysql [rootmysql-1 ~]# useradd -M -r -s /sbin/nologin -g mysql mysql4.准备数据目录 [rootmysql-1 ~]# mkdir /data/mysql [rootmysql-1 ~]# chown -R mysql. /data/mysql5.初始化数据库 [rootmysql-1 ~]# mysqld --initialize-insecure --usermysql --basedir/usr/local/mysql --datadir/data/mysql6.准备mysql配置文件 [rootmysql-1 ~]# vim /etc/my.cnf [mysqld] usermysql port3306 server_id1 #每个MySQL数据库的server_id都设置成不同的 basedir/usr/local/mysql datadir/data/mysql log_binmysql-bin gtid-modeon enforce-gtid-consistencytrue socket/tmp/mysql.sock log_error/data/mysql/mysql_err.log character-set-serverutf8[mysql] socket/tmp/mysql.sock7.准备服务管理脚本 [rootmysql-1 ~]# vim /etc/systemd/system/mysqld.service [Unit] DescriptionMySQL Server Documentationman:mysqld(8) Documentationhttp://dev.mysql.com/doc/refman/en/using-systemd.html Afternetwork.target Aftersyslog.target [Install] WantedBymulti-user.target [Service] Usermysql Groupmysql ExecStart/usr/local/mysql/bin/mysqld --defaults-file/etc/my.cnf LimitNOFILE 50008.启动数据库 [rootmysql-1 ~]# systemctl daemon-reload [rootmysql-1 ~]# systemctl start mysqld9.设置root密码 [rootmysql-1 ~]# mysqladmin -u root -P 3306 password 12345610.登陆数据库 [rootmysql-1 ~]# mysql -uroot -p123456 mysql2.2.在mysql-2中搭建MySQL多实例 由于服务器数量有限在mysql-2这台服务器中分别搭建两个从库。 2.2.1.安装数据库软件 1.解压MySQL [rootmysql-2 ~]# tar xf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz -C /usr/local/ [rootmysql-2 ~]# mv /usr/local/mysql-5.7.36-linux-glibc2.12-x86_64 /usr/local/mysql2.设置MySQL的环境变量 [rootmysql-2 ~]# vim /etc/profile export MYSQL_HOME/usr/local/mysql export PATH$MYSQL_HOME/bin:$PATH export LD_LIBRARY_PATH:/usr/local/mysql/lib3.创建mysql用户 [rootmysql-2 ~]# groupadd -r mysql [rootmysql-2 ~]# useradd -M -r -s /sbin/nologin -g mysql mysql2.2.1.搭建第一个3306从库的MySQL实例 搭建第一个从库实例端口号为3306server_id为2数据路径为/data/mysql3306。 1.创建3306从库的数据目录 [rootmysql-2 ~]# mkdir /data/mysql3306 [rootmysql-2 ~]# chown -R mysql.mysql /data/mysql3306/2.准备3306从库的配置文件 [rootmysql-1 ~]# vim /etc/my3306.cnf [mysqld] usermysql port3306 server_id2 #每个MySQL数据库的server_id都设置成不同的 basedir/usr/local/mysql datadir/data/mysql3306 log_bin/data/mysql3306/mysql-bin gtid-modeon enforce-gtid-consistencytrue socket/data/mysql3306/mysql.sock log_error/data/mysql3306/mysql_err.log character-set-serverutf8[mysql] socket/data/mysql3306/mysql.sock3.初始化3306从库 [rootmysql-2 ~]# mysqld --initialize-insecure --usermysql --basedir/usr/local/mysql --datadir/data/mysql33064.准备服务管理脚本 [rootmysql-1 ~]# vim /etc/systemd/system/mysqld3306.service [Unit] DescriptionMySQL Server Documentationman:mysqld(8) Documentationhttp://dev.mysql.com/doc/refman/en/using-systemd.html Afternetwork.target Aftersyslog.target [Install] WantedBymulti-user.target [Service] Usermysql Groupmysql ExecStart/usr/local/mysql/bin/mysqld --defaults-file/etc/my3306.cnf LimitNOFILE 50005.启动数据库 [rootmysql-1 ~]# systemctl daemon-reload [rootmysql-1 ~]# systemctl start mysqld33066.设置root密码 [rootmysql-2 ~]# mysqladmin -u root -P 3306 -S /data/mysql3306/mysql.sock password 1234567.登陆数据库 [rootmysql-2 ~]# mysql -uroot -p123456 -P3306 -S /data/mysql3306/mysql.sock mysql2.2.2.搭建第二个3307从库的MySQL实例 搭建第一个从库实例端口号为3306server_id为2数据路径为/data/mysql3306。 1.创建3307从库的数据目录 [rootmysql-2 ~]# mkdir /data/mysql3307 [rootmysql-2 ~]# chown -R mysql.mysql /data/mysql3307/2.准备3307从库的配置文件 [rootmysql-1 ~]# vim /etc/my3307.cnf [mysqld] usermysql port3307 server_id3 #每个MySQL数据库的server_id都设置成不同的 basedir/usr/local/mysql datadir/data/mysql3307 log_bin/data/mysql3307/mysql-bin gtid-modeon enforce-gtid-consistencytrue socket/data/mysql3307/mysql.sock log_error/data/mysql3307/mysql_err.log character-set-serverutf8[mysql] socket/data/mysql3307/mysql.sock3.初始化3307从库 [rootmysql-2 ~]# mysqld --initialize-insecure --usermysql --basedir/usr/local/mysql --datadir/data/mysql33074.准备服务管理脚本 [rootmysql-1 ~]# vim /etc/systemd/system/mysqld3307.service [Unit] DescriptionMySQL Server Documentationman:mysqld(8) Documentationhttp://dev.mysql.com/doc/refman/en/using-systemd.html Afternetwork.target Aftersyslog.target [Install] WantedBymulti-user.target [Service] Usermysql Groupmysql ExecStart/usr/local/mysql/bin/mysqld --defaults-file/etc/my3307.cnf LimitNOFILE 50005.启动数据库 [rootmysql-1 ~]# systemctl daemon-reload [rootmysql-1 ~]# systemctl start mysqld33076.设置root密码 [rootmysql-2 ~]# mysqladmin -u root -P 3307 -S /data/mysql3307/mysql.sock password 1234567.登陆数据库 [rootmysql-2 ~]# mysql -uroot -p123456 -P3307 -S /data/mysql3307/mysql.sock mysql2.3.MySQL多个节点搭建完毕 MySQL多个节点已经搭建完毕了下面来查询每个实例的server_id。 3.配置MySQL主从复制集群 MySQL数据库的多个实例节点已经搭建完成了下面将这些搭建的数据库实例配置成主从复制集群一主两从。 IP主机名端口角色192.168.20.11mysql-13306主库192.168.20.12mysql-23306从库192.168.20.12mysql-23307从库 配置MySQL主从复制集群的大致步骤 主库开启Binlog日志从库复制主库数据要通过Binlog进行复制。主库创建专门用作主从复制的用户。将主库数据进行备份再从库中恢复。配置从库连接主库的复制信息。启动主从复制集群。 3.1.在主库开启Binlog二进制日志 主库已经开启了Binlog二进制日志我们来查一下。 mysql show variables like %log_bin%; -------------------------------------------------------------- | Variable_name | Value | -------------------------------------------------------------- | log_bin | ON | | log_bin_basename | /data/mysql/mysql-bin | | log_bin_index | /data/mysql/mysql-bin.index | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | | sql_log_bin | ON | -------------------------------------------------------------- 6 rows in set (0.01 sec)从库复制主库数据都是通过Binlog进行传输和恢复的。 3.2.在主库上创建主从复制的用户 mysql grant replication slave on *.* to replicas192.168.20.% identified by 123456;3.3.将主库数据备份并在从库中进行还原 如果是运行很久的主库要升级为主从复制集群那么建议将主库上的数据备份还原到从库上避免从库一次性同步很多数据浪费性能。 [rootmysql-1 ~]# mysqldump -uroot -p123456 -A --master-data2 -R -E --triggers --single-transaction all_db.sql在192.168.20.12的两个从库中还原主库的备份数据。 1.将备份上传到从库的服务器上 [rootmysql-1 ~]# scp -rp all_db.sql root192.168.20.12:/root2.3306从库还原主库备份数据 [rootmysql-2 ~]# mysql -uroot -p123456 -P3306 -S /data/mysql3306/mysql.sock mysql set sql_log_bin0; mysql source /root/all_db.sql;3.3307从库还原主库备份数据 [rootmysql-2 ~]# mysql -uroot -p123456 -P3307 -S /data/mysql3307/mysql.sock mysql set sql_log_bin0; mysql source /root/all_db.sql;3.4.配置从库连接主库的复制信息 接下来我们需要配置从库连接主库的信息包括让从库知道主库的IP、端口号、复制的用户密码、Binlog相关的信息。 1获取主库Binlog的信息 从库是通过Binlog复制主库数据的首先要获取主库Binlog日志的一些信息包括主库的Binlog日志使用的是哪个、要从Binlog日志中的哪一个事件标识号处开始复制数据。 从Binlog的哪一个事件标识号处开始复制数据尤为关键因为主库可能运行的时间长了也有很多的数据一定要从合适的位置处开始复制数据要不然也会产生很大的资源浪费。 我们是用主库头一天的全库备份然后还原到从库上的在主库的备份文件中就记录了从库应该从哪一个Binlog事件标识位处开始复制数据。 vim all_db.sql -- CHANGE MASTER TO MASTER_LOG_FILEmysql-bin.000001, MASTER_LOG_POS452;从备份文件中得知我们应该让从库从主库Binlog事件标识位号452处开始复制数据。 如果主库不是运行很久的不需要备份数据还原到从库而是直接搭建的主从复制集群那么直接可以从主库状态信息那里获取Binlog的标识位号在配置主从时一定要指对Binlog标识位号否则主从将会失败。 mysql show master status; ---------------------------------------------------------------------------------------------------- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | ---------------------------------------------------------------------------------------------------- | mysql-bin.000001 | 452 | | | 4f87bad8-fc67-11ec-be7b-005056b791aa:1 | ---------------------------------------------------------------------------------------------------- 1 row in set (0.00 sec)2配置从库连接主库进行复制的参数信息 配置从库连接主库进行复制的参数有很多不过只需要记住这一条命令help change master to即可在MySQL交互式下执行此命令可以打印出从库连接主库的所有配置参数。 1.3306从库配置 [rootmysql-2 ~]# mysql -uroot -p123456 -P3306 -S /data/mysql3306/mysql.sock mysql CHANGE MASTER TOMASTER_HOST192.168.20.11,MASTER_USERreplicas,MASTER_PASSWORD123456,MASTER_PORT3306,MASTER_LOG_FILEmysql-bin.000001,MASTER_LOG_POS452,MASTER_CONNECT_RETRY10;1.3307从库配置 [rootmysql-2 ~]# mysql -uroot -p123456 -P3307 -S /data/mysql3307/mysql.sock mysql CHANGE MASTER TOMASTER_HOST192.168.20.11,MASTER_USERreplicas,MASTER_PASSWORD123456,MASTER_PORT3306,MASTER_LOG_FILEmysql-bin.000001,MASTER_LOG_POS452,MASTER_CONNECT_RETRY10; 参数解释 参数含义MASTER_HOST主库的地址MASTER_USER主从复制的专用用户MASTER_PASSWORD主从复制用户的密码MASTER_PORT主库的端口号MASTER_LOG_FILE主库的Binlog日志名MASTER_LOG_POS从主库BInlog日志的哪一个标识位处开始复制MASTER_CONNECT_RETRY主从连接失败的重试时间间隔 3.5.启动主从复制线程 1.3306从库配置 [rootmysql-2 ~]# mysql -uroot -p123456 -P3306 -S /data/mysql3306/mysql.sock mysql start slave;1.3307从库配置 [rootmysql-2 ~]# mysql -uroot -p123456 -P3307 -S /data/mysql3307/mysql.sock mysql start slave;4.查看主从复制集群状态 1.3306从库配置 [rootmysql-2 ~]# mysql -uroot -p123456 -P3306 -S /data/mysql3306/mysql.sock mysql show slave status\G;1.3307从库配置 [rootmysql-2 ~]# mysql -uroot -p123456 -P3307 -S /data/mysql3307/mysql.sock mysql show slave status\G;当每个从库的IO线程和SQL线程的状态都是Yes就表示主从复制集群搭建完毕了。 MySQL主从配置过程中从库连接主库的配置写错了应该如何解决 只要不执行start slave再执行一次change master to会覆盖上一次配置。 1.停止主从复制 mysqlstop slave;2.清空从库连接主库的信息 mysql reset slave all;3.重新设置 mysql CHANGE MASTER TOMASTER_HOST192.168.20.11,MASTER_USERreplicas,MASTER_PASSWORD123456,MASTER_PORT3306,MASTER_LOG_FILEmysql-bin.000001,MASTER_LOG_POS452,MASTER_CONNECT_RETRY10;
http://www.hkea.cn/news/14267258/

相关文章:

  • 一个网站多个数据库wordpress用插件注册
  • 行业网站源码在深圳找工作上什么网
  • 黄石网站建设方案汕头网站建设推广哪家好
  • 淄博电商网站建设把自己做的网站传到网上
  • 能打开各种网站的浏览器和平手机网站建设
  • 网站专题设计网站开发 百度编辑器
  • dedecms 网站名称标签建e网室内设计网现代轻奢
  • 哈尔滨有多少家网站建设公司会员管理系统下载
  • 网站强制使用极速模式如何推广公司网站
  • 织梦网站首页怎么修改免费ppt模板下载熊猫办公
  • 制作音乐的软件免费云南网站seo外包
  • 网站集约化建设存在的困难哈尔滨网站备案
  • 做个外贸网站设计佛山市网站建设系统
  • 品牌网站建设案例威海做网站公司哪家好
  • 找图片素材的网站有哪些中国建设工程造价管理协会网站查询
  • 网站建设管理制度网站开发是用什么语言
  • 长春市住房和城乡建设厅网站中国最新军事新闻最新消息视频
  • 临海网站开发公司物流企业网站建设
  • 微信购物网站开发一级做爰片a视频网站4
  • 好学校平台网站模板高级搜索指令
  • 南通网站建设案例优化方案英语必修三
  • 网站更换服务器需要重新备案吗手机网站需要多少钱
  • 孝感建设网站郑州网球公开赛
  • 儿童玩具网站模板充电宝seo关键词优化
  • 广西建设厅网站深圳网站建设深正互联
  • 邯郸市网站建设多少钱做网站大概要花多少钱
  • 营销网站建设哪里便宜北京朝阳区
  • 浙江省建设工程检测协会网站个人网站名称举例
  • 怎么做网站布局网站建设中页面模板下载
  • 做一款什么网站赚钱电商怎么做的步骤