首页 文章 精选 留言 我的

精选列表

搜索[centos],共5624篇文章
优秀的个人博客,低调大师

centos7 Mysql5.7.15版本 一主一备架构(生产环境带数据,不锁库)

1、概述 场景:生产线上,有一个MySQL数据库,为了安全,领导想给它做成主备架构,添加一个备库来做实时数据同步。 在操作之前需要考虑的问题: 如果有条件的话,获取生产库上,操作系统及数据库安装文档,认真观看,有没有对系统及数据库做一些特殊的配置。 (1)操作系统方面: 是否设置主机名; 配置静态IP地址; 使用与主库一样的操作系统; 操作系统所使用的字符集; 主库操作系统有没有作其他更改。 (2)MySQL数据库方面: 获取主库的my.cnf,备库配置文件要根据主库的my.cnf进行相应的配置; 数据库将使用哪一类字符集,后期更改字符集是比较痛苦的事; server_id不建议使用1,唯一值; 日常主库使用什么工具进行备份,如果要求不锁表,建议使用percona-xtrabackup对主库进行全备;如果可以锁表,可以使用mysqldump进行备份。 怎样将主库的备份文件传输到备库上,能否使用scp。 2、所需软件 3、备库MySQL软件的安装 3.1、查询服务器上是否已经安装mysql 1 #rpm-aq|grepmariadb 3.2、先卸载旧的版本 如果是生产环境,请谨慎卸载,这个包可能会影响其它软件的使用,如果不卸载,安装mysql5.7会报错,即安装不了。 卸载旧版本mariadb 1 rpm-emariadb-libs --nodeps 3.3、安装软件 //新建msyql用户禁止登录shell 1 2 groupaddmysql useradd-r-s/sbin/nologin-gmysqlmysql 解压 1 tarxvfmysql-5.7.15-1.el7.x86_64.rpm-bundle.tar 安装软件 1 2 3 4 5 6 7 8 rpm-ivfmysql-community-common-5.7.15-1.el7.x86_64.rpm rpm-ivfmysql-community-libs-5.7.15-1.el7.x86_64.rpm rpm-ivfmysql-community-libs-compat-5.7.15-1.el7.x86_64.rpm rpm-ivfmysql-community-client-5.7.15-1.el7.x86_64.rpm rpm-ivfmysql-community-embedded-5.7.15-1.el7.x86_64.rpm rpm-ivfmysql-community-devel-5.7.15-1.el7.x86_64.rpm rpm-ivfmysql-community-embedded-devel-5.7.15-1.el7.x86_64.rpm rpm-ivfmysql-community-server-5.7.15-1.el7.x86_64.rpm // mysql-community-test依赖perl,需要安装perl-Data-Dumper与perl(JSON) 1 2 3 yuminstallperl-Data-Dumperperl-JSON-y rpm-ivfmysql-community-test-5.7.15-1.el7.x86_64.rpm rpm-ivfmysql-community-embedded-compat-5.7.15-1.el7.x86_64.rpm 3.4、MySQL 5.7.15修改密码 1 /bin/systemctlstartmysqld.service 查看密码 1 2 sudogrep 'temporarypassword' /var/log/mysqld.log mysql-uroot-p//输入上条命令查看到的密码 进入mysql,修改密码 1 mysql> set password = password ( '123456' );mysql>flush privileges ; 设置开机启动 1 systemctlenablemysqld 3.5、开启mysql的3306端口号,给root用户授权,用于远程访问 3.5.1、永久关闭iptables与Selinux 关闭防火墙 1 2 systemctlstopfirewalld systemctldisablefirewalld 临时关闭Selinux 1 setenforce0 永久关闭Selinux 1 sed-i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config 重启系统生效 3.5.2、给root用户授权,使远程客户端才能够连接过来 1 mysql> GRANT ALL PRIVILEGES ON *.* TO 'root' @ '%' IDENTIFIED BY '123456' WITH GRANT OPTION ;mysql>flush privileges ; 3.6、修改备服务器slave的配置文件my.cnf 参考主服务器的配置文件进行相应的配置。 先关闭数据库 1 systemctlstopmysqld 修改配置文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #vi/etc/my.cnf[client] default - character - set =gbk[mysqld] character - set -server=gbk log_bin=slave-bin log_bin_index=slave-bin. index basedir=/usr datadir=/var/lib/mysql port=3306server_id=178socket=/var/lib/mysql/mysql.sock relay_log=relay-log relay_log_index=relay-log. index skip- name -resolve max -connections=1000default-storage-engine=InnoDBlong_query_time=1slow_query_log_file=/var/lib/mysql/mysql_slow_query.log binlog_format=row #Disablingsymbolic-links is recommended to preventassortedsecurityriskssymbolic-links=0 log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid 3.7、重启备库服务器的mysql 1 systemctlstartmysqld 4、主备复制配置步骤如下 4.1、对主库进行全备 使用percona-xtrabackup对主数据库进行全备份: 安装percona-xtrabackup软件 安装相关依赖包: 关于libev:可以去这个地址下载: http://mirrors.yun-idc.com/epel/6/x86_64/libev-4.03-3.el6.x86_64.rpm 1 yuminstalllibev 安装Percona-XtraBackup 1 2 3 4 tarxvfPercona-XtraBackup-2.4.4-rdf58cf2-el7-x86_64-bundle.tar yuminstallpercona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm rpm-ivfpercona-xtrabackup-24-debuginfo-2.4.4-1.el7.x86_64.rpm rpm-ivfpercona-xtrabackup-test-24-2.4.4-1.el7.x86_64.rpm 在/tmp/建立backup文件存放备份数据库: 1 #cd/tmp#mkdirbackup 使用以下命令进行全备份: 1 innobackupex --user=root--password=123456/tmp/backup/innobackupex--use-memory=500m--apply-log/tmp/backup/2016-03-14_11-26-07/ 4.2、将备份好的文件传输到备库上,执行恢复 先停备库(备库操作) 1 systemctlstopmysqld 主库操作: 主库进入/tmp/backup/2016-03-14_11-26-07/目录把备份的目录拷贝到备服务器上,放入备服务器数据库目录下(即:/var/lib/mysql) 1 scp-r*192.168.1.178:/var/lib/mysql/ 对/var/lib/mysql下的文件属组进行更改: 备库执行以下操作: 1 2 cd/var/lib/mysql chown-Rmysql.mysql* 重新启动备库mysql服务: 1 systemctlstartmysqld 4.3、在主服务器上建立帐户并授权 1 2 #mysql-uroot-pEnter password : mysql> grant replicationslave on *.* to apexsoft@ '192.168.1.178' identified by '123456' ;mysql>flush privileges ; 4.4、在备库上查看数据库已经同步到什么时候 进入/var/lib/mysql/查看xtrabackup_binlog_info 1 #catxtrabackup_binlog_infomaster-bin.000001865 4.5、配置备服务器Slave 1 mysql>changemaster to master_host= '192.168.1.173' ,master_user= 'apexsoft' ,master_password= '123456' ,master_log_file= 'master-bin.000001' ,master_log_pos=865; 如果在一个机器多个实例上,可能需要指定端口号或者修改了mysql 默认端口号,在配置主备复制的时候需要加上MASTER_PORT=3306; 启动备服务器复制功能 1 mysql>startslave; 4.6、检查备库服务器复制功能状态 1 mysql>showslavestatus\G;***************************1.row***************************Slave_IO_State:Waiting for master to sendeventMaster_Host:192.168.1.173//主服务器地址Master_User:apexsoft//授权帐户名,尽量避免使用rootMaster_Port:3306//数据库端口,部分版本没有此行Connect_Retry:60Master_Log_File:master-bin.000001Read_Master_Log_Pos:865//#同步读取二进制日志的位置,大于等于>=Exec_Master_Log_PosRelay_Log_File:relay-log.000002Relay_Log_Pos:284Relay_Master_Log_File:master-bin.000001Slave_IO_Running:Yes//此状态必须YESSlave_SQL_Running:Yes//此状态必须YESReplicate_Do_DB:Replicate_Ignore_DB:Replicate_Do_Table:Replicate_Ignore_Table:Replicate_Wild_Do_Table:Replicate_Wild_Ignore_Table:Last_Errno:0Last_Error:Skip_Counter:0Exec_Master_Log_Pos:322Relay_Log_Space:451Until_Condition:NoneUntil_Log_File:Until_Log_Pos:0Master_SSL_Allowed: No 1 2 3 4 Master_SSL_CA_File:Master_SSL_CA_Path:Master_SSL_Cert:Master_SSL_Cipher:Master_SSL_Key:Seconds_Behind_Master:0Master_SSL_Verify_Server_Cert: No Last_IO_Errno:0Last_IO_Error:Last_SQL_Errno:0Last_SQL_Error:Replicate_Ignore_Server_Ids:Master_Server_Id:1Master_UUID:dcc7a60f-2c1d-11e5-ad33-000c29133345Master_Info_File:/usr/ local /mysql/data/master.info SQL_Delay:0SQL_Remaining_Delay: NULL Slave_SQL_Running_State:Slavehas read all relaylog;waiting for theslaveI/Othread to update it Master_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:01row in set (0.00sec) 注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。以上操作过程,主备服务器配置完成。 可以在主服务器上查看备库服务器连接状态: 1 showprocesslist; 4.7、验证主备架构是否搭建成功 主服务器Mysql,建立数据库,并在这个库中建表插入一条数据: 1 2 mysql> create database apex_db;QueryOK,1rowaffected(0.00sec)mysql>useapex_db; Database changed mysql> create table apex_tb(id int (3), name char (10));QueryOK,0 rows affected(0.00sec)mysql> insert into apex_tb values (001, 'apex' );QueryOK,1rowaffected(0.00sec)mysql>showdatabases;+ --------------------+|Database|+--------------------+|information_schema||apex_db||mysql||test|+--------------------+4rowsinset(0.00sec) 备库服务器Mysql查询: 1 2 mysql>showdatabases;+ --------------------+|Database|+--------------------+|information_schema||apex_db||mysql||test|+--------------------+4rowsinset(0.00sec)mysql>useapex_dbDatabasechanged mysql> select * from apex_tb;//可以看到在主服务器上新增的具体数据+ ------+------+|id|name|+------+------+|1|apex|+------+------+1rowinset(0.00sec) 本文转自 corasql 51CTO博客,原文链接:http://blog.51cto.com/corasql/1906986,如需转载请自行联系原作者

优秀的个人博客,低调大师

阿里云Centos7.6上面部署基于redis的分布式爬虫scrapy-redis将任务队列push进redis

Scrapy是一个比较好用的Python爬虫框架,你只需要编写几个组件就可以实现网页数据的爬取。但是当我们要爬取的页面非常多的时候,单个服务器的处理能力就不能满足我们的需求了(无论是处理速度还是网络请求的并发数),这时候分布式爬虫的优势就显现出来。 而Scrapy-Redis则是一个基于Redis的Scrapy分布式组件。它利用Redis对用于爬取的请求(Requests)进行存储和调度(Schedule),并对爬取产生的项目(items)存储以供后续处理使用。scrapy-redi重写了scrapy一些比较关键的代码,将scrapy变成一个可以在多个主机上同时运行的分布式爬虫。说白了,就是使用redis来维护一个url队列,然后scrapy爬虫都连接这一个redis获取url,且当爬虫在redis处拿走了一个url后,redis会将这个url从队列中清除,保证不会被2个爬虫拿到同一个url,即使可能2个爬虫同时请求拿到同一个url,在返回结果的时候redis还会再做一次去重处理,所以这样就能达到分布式效果,我们拿一台主机做redis 队列,然后在其他主机上运行爬虫.且scrapy-redis会一直保持与redis的连接,所以即使当redis 队列中没有了url,爬虫会定时刷新请求,一旦当队列中有新的url后,爬虫就立即开始继续爬 首先分别在主机和从机上安装需要的爬虫库pip3 install requests scrapy scrapy-redis redis 在主机中安装redis 点我领取阿里云2000元代金券,(阿里云优惠券的作用:购买阿里云产品,最后支付结算的时候,阿里云优惠券可抵扣一部分费用。 安装redis yum install redis 启动服务systemctl start redis 查看版本号redis-cli --version 设置开机启动systemctl enable redis.service 修改redis配置文件 vim /etc/redis.conf 将保护模式设为no,同时注释掉bind,为了可以远程访问,另外需要注意阿里云安全策略也需要暴露6379端口 改完配置后,别忘了重启服务才能生效systemctl restart redis然后分别新建爬虫项目scrapy startproject myspider在项目的spiders目录下新建test.py 点我领取阿里云2000元代金券,(阿里云优惠券的作用:购买阿里云产品,最后支付结算的时候,阿里云优惠券可抵扣一部分费用。 导包 import scrapyimport osfrom scrapy_redis.spiders import RedisSpider 定义抓取类 class Test(scrapy.Spider): class Test(RedisSpider): #定义爬虫名称,和命令行运行时的名称吻合name = "test" 定义redis的key redis_key = 'test:start_urls' 定义头部信息 haders = { 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/73.0.3683.86 Chrome/73.0.3683.86 Safari/537.36' } def parse(self, response): print(response.url) pass 然后修改配置文件settings.py,增加下面的配置,其中redis地址就是在主机中配置好的redis地址:BOT_NAME = 'myspider' SPIDER_MODULES = ['myspider.spiders']NEWSPIDER_MODULE = 'myspider.spiders' 点我领取阿里云2000元代金券,(阿里云优惠券的作用:购买阿里云产品,最后支付结算的时候,阿里云优惠券可抵扣一部分费用。 设置中文编码 FEED_EXPORT_ENCODING = 'utf-8' scrapy-redis 主机地址 REDIS_URL = 'redis://root@39.106.228.179:6379' 队列调度 SCHEDULER = "scrapy_redis.scheduler.Scheduler" 不清除缓存 SCHEDULER_PERSIST = True 通过redis去重 DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter" 点我领取阿里云2000元代金券,(阿里云优惠券的作用:购买阿里云产品,最后支付结算的时候,阿里云优惠券可抵扣一部分费用。 不遵循robots ROBOTSTXT_OBEY = False 最后,可以在两台主机上分别启动scrapy服务此时,服务已经起来了,只不过redis队列中没有任务,在等待状态进入主机的redisredis-cli将任务队列push进redislpush test:start_urls http://baidu.comlpush test:start_urls http://chouti.com可以看到,两台服务器的爬虫服务分别领取了队列中的任务进行抓取,同时利用redis的特性,url不会重复抓取爬取任务结束之后,可以通过flushdb命令来清除地址指纹,这样就可以再次抓取历史地址了。 阿里云服务器:活动地址 购买可领取:阿里云代金券

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册