首页 文章 精选 留言 我的

精选列表

搜索[读写分离],共10005篇文章
优秀的个人博客,低调大师

docker分离部署lnmp

以下所需的全部的文件、镜像、软件,如有需要请到我的百度云分享下载: 链接:http://pan.baidu.com/s/1kUVNdsj 密码:an9l 项目需求: 构建lnmp平台。 要求nginx、php、mysql分开布署。 Nginx通过fastcgi方式支持php动态页面 实验完整框架如下: 说明:使用单一进程容器,即一个容器只运行一种服务,而不是把所有服务放在一个容器的设计,让lnmp项目需要的Nginx、PHP、MySQL组件,分别运行在各自镜像创建出来的独立容器中。 实验步骤如下: 1、安装docker1.12并开始服务 1)安装docker1.12 2)开启docker服务并开机自启 3)关闭selinux(一定要关闭) 4)开启路由转发功能 5)下载centos6镜像 (我这里已经下载好,并做成了归档压缩包,只用解压即可) 2、创建实验所用文件夹以及文件 1)分别创建工作目录 2)再分别创建相应目录下的文件和子目录 3、分别编辑nginx、php、mysql的dockerfile文件以及各自的supervisord.conf文件 1)nginx ①编辑nginx的dockerfile文件 #images of nginx FROM centos:centos6 MAINTAINER from zhengpengfei@example.com #install supervisor RUN yum -y install python-setuptools RUN /usr/bin/easy_install supervisor #install nginx RUN yum -y install pcre-devel zlib-devel gcc make ADD ./software/nginx-1.6.2.tar.gz /usr/src RUN useradd -M -s /sbin/nologin nginx RUN cd /usr/src/nginx-1.6.2/ && ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --user=nginx --group=nginx && make && make install #Modify nginx configuration file COPY nginx.conf /usr/local/nginx/conf/ RUN ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin RUN mkdir /usr/local/nginx/html/web #Open nginx service COPY supervisord.conf /etc/supervisor/supervisord.conf EXPOSE 80 CMD ["/usr/bin/supervisord"] ②编写nginx的supervisord.conf配置文件 ③docker build -t命令制作nginx镜像 ④镜像制作完成 2)php ①编辑php的dockerfile文件 #images of php FROM centos:centos6 MAINTAINER from zhengpengfei@example.com #install supervisor RUN yum -y install python-setuptools RUN /usr/bin/easy_install supervisor #install php RUN yum -y install gd libxml2-devel libjpeg-devel libpng-devel mysql-devel gcc make RUN useradd -M -s /sbin/nologin php ADD ./software/php-5.3.28.tar.gz /usr/src RUN cd /usr/src/php-5.3.28/ RUN cp /usr/lib64/mysql/libmysqlclient.so.16.0.0 /usr/lib/libmysqlclient.so RUN cd /usr/src/php-5.3.28/ && ./configure --prefix=/usr/local/php --with-gd --with-zlib --with-mysql --with-mysqli --with-mysql-sock --with-config-file-path=/usr/local/php --enable-mbstring --enable-fpm --with-jpeg-dir=/usr/lib && make && make install #Modify PHP configuration file RUN cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf COPY php-fpm.conf /usr/local/php/etc/ RUN mkdir -p /var/www/html/web #Open php-fpm service ADD ./supervisord.conf /etc/supervisor/supervisord.conf EXPOSE 9000 CMD ["/usr/bin/supervisord"] ②编写php的supervisord.conf配置文件 ③docker build -t命令制作php镜像 ④镜像制作完成 3)mysql ①编辑mysql的dockerfile文件 #image of mysql FROM centos:centos6 MAINTAINER from zhengpengfei@example.com #install supervisor RUN yum -y install python-setuptools RUN /usr/bin/easy_install supervisor #install mysql RUN yum -y install ncurses-devel make gcc gcc-c++ ADD ./software/cmake-2.8.12.tar.gz /usr/src ADD ./software/mysql-5.5.38.tar.gz /usr/src RUN cd /usr/src/cmake-2.8.12 && ./configure && gmake && gmake install RUN cd /usr/src/mysql-5.5.38 && cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc/ -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all && make && make install #Optimal adjustment mysql WORKDIR /usr/src/mysql-5.5.38/ RUN cp -rf ./support-files/my-medium.cnf /etc/my.cnf RUN cp -rf ./support-files/mysql.server /etc/rc.d/init.d/mysqld RUN chmod +x /etc/rc.d/init.d/mysqld RUN echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile RUN source /etc/profile #Initialize mysql RUN groupadd mysql RUN useradd -M -s /sbin/nologin mysql -g mysql RUN chown -R mysql:mysql /usr/local/mysql RUN /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/ #service mysql start ADD ./supervisord.conf /etc/supervisor/supervisord.conf EXPOSE 3306 CMD ["/usr/bin/supervisord"] ②编写mysql的supervisord.conf配置文件 ③docker build -t命令制作mysql镜像 ④镜像制作完成 4、编写docker-compose.yml文件 5、安装docker-compose 1)先安装pip 2)再安装compose 6、通过docker-compose启动项目 7、进入mysql容器修改数据库root密码以及创建数据库和创建授权用户 1)修改数据库用户root密码 2)创建数据库 3)创建授权用户 4)给root用户授予全部权限 8、做html、php页面和数据库访问测试 1)制作html、php测试页 2)测试nginx和php的访问处理 3)制作数据库的测试页面 4)测试数据库连接 至此说明nginx、php、mysql三者的协同工作已经没有问题了 8、安装一个电影网站,做最后的lnmp协同工作测试 1)解压缩SKYUC 2)设置权限 分别去nginx和php容器给予权限: php: nginx: 3)宿主机防火墙开启80例外 4)在一台客户机安装SKYUC 本文转自Mr大表哥 博客,原文链接:http://blog.51cto.com/zpf666/1905555 如需转载请自行联系原作者

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

Go 语言读写 Excel 基础库

Excelize 是 Go 语言编写的一个用来操作 Office Excel 文档类库,基于 ECMA-376 Office OpenXML 标准。可以使用它来读取、写入 XLSX 文件。相比较其他的开源类库,Excelize 支持写入原本带有图片(表)的文档,还支持向 Excel 中插入图片,并且在保存后不会丢失图表样式。 安装 go get github.com/xuri/excelize/v2 创建 XLSX package main import ( "fmt" "github.com/xuri/excelize/v2" ) func main() { f := excelize.NewFile() // Create a new sheet. index := f.NewSheet("Sheet2") // Set value of a cell. f.SetCellValue("Sheet2", "A2", "Hello world.") f.SetCellValue("Sheet1", "B2", 100) // Set active sheet of the workbook. f.SetActiveSheet(index) // Save xlsx file by the given path. err := f.SaveAs("./Book1.xlsx") if err != nil { fmt.Println(err) } } 读取已有文档 package main import ( "fmt" "github.com/xuri/excelize/v2" ) func main() { f, err := excelize.OpenFile("./Book1.xlsx") if err != nil { fmt.Println(err) return } // Get value from cell by given worksheet name and axis. cell, err := f.GetCellValue("Sheet1", "B2") if err != nil { fmt.Println(err) return } fmt.Println(cell) // Get all the rows in the Sheet1. rows, err := f.GetRows("Sheet1") for _, row := range rows { for _, colCell := range row { fmt.Print(colCell, "\t") } fmt.Println() } } 向 Excel 中插入图表 package main import ( "fmt" "github.com/xuri/excelize/v2" ) func main() { categories := map[string]string{"A2": "Small", "A3": "Normal", "A4": "Large", "B1": "Apple", "C1": "Orange", "D1": "Pear"} values := map[string]int{"B2": 2, "C2": 3, "D2": 3, "B3": 5, "C3": 2, "D3": 4, "B4": 6, "C4": 7, "D4": 8} f := excelize.NewFile() for k, v := range categories { f.SetCellValue("Sheet1", k, v) } for k, v := range values { f.SetCellValue("Sheet1", k, v) } err := f.AddChart("Sheet1", "E1", `{"type":"col3DClustered","series":[{"name":"Sheet1!$A$2","categories":"Sheet1!$B$1:$D$1","values":"Sheet1!$B$2:$D$2"},{"name":"Sheet1!$A$3","categories":"Sheet1!$B$1:$D$1","values":"Sheet1!$B$3:$D$3"},{"name":"Sheet1!$A$4","categories":"Sheet1!$B$1:$D$1","values":"Sheet1!$B$4:$D$4"}],"title":{"name":"Fruit 3D Clustered Column Chart"}}`) if err != nil { fmt.Println(err) return } // Save xlsx file by the given path. err = f.SaveAs("./Book1.xlsx") if err != nil { fmt.Println(err) } } 向 Excel 中插入图片 package main import ( "fmt" _ "image/gif" _ "image/jpeg" _ "image/png" "github.com/xuri/excelize/v2" ) func main() { f, err := excelize.OpenFile("./Book1.xlsx") if err != nil { fmt.Println(err) return } // Insert a picture. err = f.AddPicture("Sheet1", "A2", "./image1.png", "") if err != nil { fmt.Println(err) } // Insert a picture to worksheet with scaling. err = f.AddPicture("Sheet1", "D2", "./image2.jpg", `{"x_scale": 0.5, "y_scale": 0.5}`) if err != nil { fmt.Println(err) } // Insert a picture offset in the cell with printing support. err = f.AddPicture("Sheet1", "H2", "./image3.gif", `{"x_offset": 15, "y_offset": 10, "print_obj": true, "lock_aspect_ratio": false, "locked": false}`) if err != nil { fmt.Println(err) } // Save the xlsx file with the origin path. err = f.Save() if err != nil { fmt.Println(err) } } 还有其他一些功能,在这里就不一一列举了,详细使用文档以及获取后期的维护更新可以从项目的主页获取 github.com/xuri/excelize

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

jdbc 读写 blob 类型的数据

1 MySQL BLOB类型 MySQL中,BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据。 插入BLOB类型的数据必须使用PreparedStatement,因为BLOB类型的数据无法使用字符串拼接写的。 MySQL的四种BLOB类型(除了在存储的最大信息量上不同外,他们是等同的) 实际使用中根据需要存入的数据大小定义不同的BLOB类型。 需要注意的是:如果存储的文件过大,数据库的性能会下降。 如果在指定了相关的Blob类型以后,还报错:xxx too large,那么在mysql的安装目录下,找my.ini文件加上如下的配置参数:max_allowed_packet=16M。同时注意:修改了my.ini文件之后,需要重新启动mysql服务。 2 向数据表中插入大数据类型 //获取连接 Connection conn = JDBCUtils.getConnection(); String sql = "insert into customers(name,email,birth,photo)values(?,?,?,?)"; PreparedStatement ps = conn.prepareStatement(sql); //java项目www.fhadmin.org // 填充占位符 ps.setString(1, "张强"); ps.setString(2, "123@126.com"); ps.setDate(3, new Date(new java.util.Date().getTime())); // 操作Blob类型的变量 FileInputStream fis = new FileInputStream("xhq.png"); ps.setBlob(4, fis); //执行 ps.execute(); fis.close(); JDBCUtils.closeResource(conn, ps); 3 修改数据表中的Blob类型字段 Connection conn = JDBCUtils.getConnection(); String sql = "update customers set photo = ? where id = ?"; PreparedStatement ps = conn.prepareStatement(sql); //java项目www.fhadmin.org // 填充占位符 // 操作Blob类型的变量 FileInputStream fis = new FileInputStream("coffee.png"); ps.setBlob(1, fis); ps.setInt(2, 25); ps.execute(); fis.close(); JDBCUtils.closeResource(conn, ps); 4 从数据表中读取大数据类型 //java项目www.fhadmin.org String sql = "SELECT id, name, email, birth, photo FROM customer WHERE id = ?"; conn = getConnection(); ps = conn.prepareStatement(sql); ps.setInt(1, 8); rs = ps.executeQuery(); if(rs.next()){ Integer id = rs.getInt(1); String name = rs.getString(2); String email = rs.getString(3); Date birth = rs.getDate(4); Customer cust = new Customer(id, name, email, birth); System.out.println(cust); //读取Blob类型的字段 Blob photo = rs.getBlob(5); InputStream is = photo.getBinaryStream(); OutputStream os = new FileOutputStream("c.jpg"); byte [] buffer = new byte[1024]; int len = 0; while((len = is.read(buffer)) != -1){ os.write(buffer, 0, len); } JDBCUtils.closeResource(conn, ps, rs); if(is != null){ is.close(); } if(os != null){ os.close(); } }

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

Spark读写Hbase中的数据

def main(args: Array[String]) { val sparkConf = new SparkConf().setMaster("local").setAppName("cocapp").set("spark.kryo.registrator", classOf[HBaseConfiguration].getName) .set("spark.executor.memory", "4g") val sc: SparkContext = new SparkContext(sparkConf) val sqlContext = new HiveContext(sc) val mySQLUrl = "jdbc:mysql://localhost:3306/yangsy?user=root&password=yangsiyi" val rows = sqlContext.jdbc(mySQLUrl, "person") val tableName = "spark" val columnFamily = "cf" //rows.first().getString(1) val configuration = HBaseConfiguration.create(); configuration.set(TableInputFormat.INPUT_TABLE, "test"); val admin = new HBaseAdmin(configuration) val hBaseRDD = sc.newAPIHadoopRDD(configuration, classOf[TableInputFormat], classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable], classOf[org.apache.hadoop.hbase.client.Result]) hBaseRDD.count() def toHbase(rows: DataFrame,tableName : String,columnFamily: String) { val configuration = HBaseConfiguration.create(); val admin = new HBaseAdmin(configuration) if (admin.tableExists(tableName)) { print("table Exists") admin.disableTable(tableName); admin.deleteTable(tableName); } configuration.addResource("hbase-site.xml") val tableDesc = new HTableDescriptor(tableName) tableDesc.addFamily(new HColumnDescriptor(columnFamily)) admin.createTable(tableDesc) rows.foreachPartition { row => val table = new HTable(configuration, tableName) row.foreach { a => val put = new Put(Bytes.toBytes("row1")) put.add(Bytes.toBytes(columnFamily), Bytes.toBytes("coulumn1"), Bytes.toBytes(a.getString(0))) table.put(put) println("insert into success") } } 然而并没有什么乱用,发现一个问题,就是说,在RDD取值与写入HBASE的时候,引入外部变量无法序列化。。。。。。网上很多说法是说extendsSerializable ,可是尝试无效。Count()是可以获取到,但是如果我要在configuration中set列,然后进行查询就会报错了。暂时各种办法尝试无果,还在想办法,也不明原因。

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

Spark on MaxCompute读写阿里云的Hbase

背景 Spark on MaxCompute可以访问位于阿里云VPC内的实例(例如ECS、HBase、RDS),默认MaxCompute底层网络和外网是隔离的,Spark on MaxCompute提供了一种方案通过配置spark.hadoop.odps.cupid.vpc.domain.list来访问阿里云的vpc网络环境的Hbase。Hbase标准版和增强版的配置不同,本文通过访问阿里云的标准版和增强版的Hbase简单的描述需要加的配置。 Hbase标准版 环境准备Hbase的网络环境是存在vpc下的,所以我们首先要添加安全组开放端口2181、10600、16020.同时Hbase有白名单限制我们需要把对应的MaxCompute的IP加入到Hbase的白名单。设置对应vpc的安全组找到对应的vpc id然后添加安全组设置端口 添加Hb

资源下载

更多资源
优质分享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应用均可从中受益。