东东东 陈煜东的博客

月份存档: 二月 2014

源码编译安装MySQL5.6.16

mysql5.6.16的安装和之前的5.5、5.1有些不同,编译的时候不再使用./configure来进行了,使用了cmake命令来进行编译项目。

准备编译环境

因为我的Linux是刚安装的,需要安装很多的必要程序。

yum -y install make gcc-c++ cmake bison-devel  ncurses-devel gcc \ 
       autoconf automake zlib* fiex* libxml* libmcrypt* libtool-ltdl-devel*

下载MySQL

进入http://dev.mysql.com/downloads/mysql/ 的source/Generic Linux (Architecture Independent), Compressed TAR Archive,文件mysql-5.6.16.tar.gz

wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.16.tar.gz
tar xvf mysql-5.6.16.tar.gz
cd mysql-5.6.16

编译源码

接下来组织项目

cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/tmp/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci

注意,这个cmake是替代以前的./configure 步骤。如果你需要更多的参数,请参考http://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.html

有时候会出现类似的问题。

Googlemock was not found. gtest-based unit tests will be disabled. You can run cmake . -DENABLE_DOWNLOADS=1 to automatically download and build required components from source. — If you are inside a firewall, you may need to use an http proxy: export http_proxy=http://example.com:80
  • 使用参数-DENABLE_DOWNLOADS=1 自动下载。
  • 有网络限制,设置http代理export http_proxy=http://example.com:80。环境变量http_proxy 也为 curl 等其他工具所用。尽管 yum 可以识别大写或小写的 http_proxy,但curl 要求环境变量的名称是小写。

如果这个cmake这个步骤有出现问题,解决后重新再cmake一次。如果输出类似这样,那么就好了。

-- Running cmake version 2.6.4
-- MySQL 5.6.16
-- Packaging as: mysql-5.6.16-Linux-x86_64
-- HAVE_VISIBILITY_HIDDEN
-- HAVE_VISIBILITY_HIDDEN
-- HAVE_VISIBILITY_HIDDEN
-- Using cmake version 2.6.4
-- Not building NDB
-- Library mysqlclient depends on OSLIBS -lpthread;m;rt;dl
-- GMOCK_SOURCE_DIR:/root/mysql-5.6.16/source_downloads/gmock-1.6.0
-- GTEST_LIBRARIES:gmock;gtest
-- Library mysqlserver depends on OSLIBS -lpthread;m;rt;crypt;dl
-- Configuring done
-- Generating done
-- Build files have been written to: /root/mysql-5.6.16

接着编译源码

make && make install

编译时间缓慢,等待中…

修改文件权限,生成数据库

groupadd mysql
useradd -r -g mysql mysql
cd /usr/local/mysql
chown -R mysql:mysql .
scripts/mysql_install_db --user=mysql --ldata=/data/mysql/data
chown -R root .
chown -R mysql data

说明:参数--ldata说明你的数据文件存放的目录,如果你使用默认的路径,那么这个参数可以去除。如果你不增加此参数,但是在配置文件(见下方的datadir配置)中指定了其他的目录,那么会在启动MySQL的时候出现类似的提示:

Starting MySQL. ERROR! The server quit without updating PID file (/data/mysql/data/VM_208.pid).

出现这个的解决办法就是增加--ldata参数,指定和配置文件中datadir相同的值,重新执行mysql_install_db即可。

设置配置文件

MySQL 5.6.8开始,就不在分发my.cnf等配置的demo,所以想随便拿一个用都比较麻烦。

my.cnf的配置文件的默认读取顺序为
File Name(上面的优先) Purpose
/etc/my.cnf Global options
/etc/mysql/my.cnf Global options
SYSCONFDIR/my.cnf Global options
$MYSQL_HOME/my.cnf Server-specific options
defaults-extra-file The file specified with --defaults-extra-file=path, if any
~/.my.cnf User-specific options
~/.mylogin.cnf Login path options
[client]
port=3306
socket=/var/lib/mysql/mysql.sock
default-character-set = utf8

[mysqld]
port=3306
bind-address=127.0.0.1
basedir=/usr/local/mysql
datadir=/data/data/mysql/data
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

############# default settings  ################
# time zone
default-time-zone = system
character-set-server = utf8
default-storage-engine = InnoDB

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

我的这个配置比较简单,声明一下常用的变量,如果你需要对性能优化,那么你需要细细研读一下配置文件。可以参考

启动MySQL,开机自动启动设置

手动启动MySQL。

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
/etc/init.d/mysql start
##或者
service mysql start

在上面的步骤后,开机自动启动设置

chkconfig --add mysql
##有的系统需要下面的
chkconfig --level 345 mysql on

可以参考:http://dev.mysql.com/doc/refman/5.6/en/automatic-start.html

修改root密码

默认的密码是空的,很危险,需要修改一下。

在此之前,为方便调用mysql,我们先生成一个mysql的软链。

ln -s /usr/local/mysql/bin/mysql /usr/bin/

然后修改密码

mysql -uroot  -h127.0.0.1 -p
mysql> SET PASSWORD = PASSWORD('123456');

将来如果你忘记了root密码,可以参考重置MySQL密码

通过上面的步骤,就可以使用MySQL数据库了,另外可以为mysql安装phpmyadmin作为前端的管理界面。

参考资料

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: 源码编译安装MySQL5.6.16 – https://www.chenyudong.com/archives/building-mysql-5-6-from-source.html

分类: 网站建设

Squid搭建正向代理

本文主要讲述squid正向代理,如果你需要反向代理,可以参考一下Nginx的反向代理

网络环境复杂,不是所有的机器都能直接访问目标服务器的,总是有那么多的阻隔。比如我们的机器处于内网环境中(公司内网、墙内、学校内网),无法直接访问。这个时候如果有个机器能够访问外网的资源,那么我们就可以通过这个机器进行跳转。如下图。

正向代理

不只是普通的上网可以使用正向代理,我们的程序部署在内网内,但是又要主动请求外部资源的时候,这个时候也可以使用能够访问互联网资源的机器搭建正向代理服务。以此达到安全的服务。通过Squid,我们可以使用HTTP代理,这样就可以访问外网了。

安装Squid

快速的安装squid就是使用yum或者apt-get了。

yum install squid

默认的配置文件介绍

默认的文件在/etc/squid/squid.conf

#############################################################################
# squid权限控制 acl和http_access
#############################################################################
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1

# 局域网内的IP,看情况是否考虑需要
acl localnet src 10.0.0.0/8         # 一般大型企业或者学校使用,或者虚拟机中的网络
acl localnet src 172.16.0.0/12      # 一般很少用
acl localnet src 192.168.0.0/16     # 一般家用路由器或者虚拟机中的网络
acl localnet src fc00::/7           # IPv6
acl localnet src fe80::/10          # IPv6

# 定义ssl端口、一些安全端口和http访问的connect方法
acl SSL_ports port 443
acl Safe_ports port 80      # http
acl Safe_ports port 21      # ftp
acl Safe_ports port 443     # https
acl Safe_ports port 70      # gopher
acl Safe_ports port 210     # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280     # http-mgmt
acl Safe_ports port 488     # gss-http
acl Safe_ports port 591     # filemaker
acl Safe_ports port 777     # multiling http
acl CONNECT method CONNECT


# 推荐最小访问权限配置

# 允许本机管理缓存,其他的拒绝
http_access allow manager localhost
http_access deny manager

# 拒绝非安全端口
http_access deny !Safe_ports

# 拒绝connect到非ssl 443端口(上面定义了)
http_access deny CONNECT !SSL_ports

# 强烈建议去除注释。防止通过代理来访问本代理服务器上的web程序
# 以免认为是localhost用户访问web服务。
#http_access deny to_localhost

# 下面插入你自己的规则
#---------

# 允许localhost和局域网内用户的请求,根据需要调整
http_access allow localnet
http_access allow localhost

# 最后,拒绝其他的对代理的访问
http_access deny all

#############################################################################
##   Squid的基本配置
#############################################################################
# 默认监听3128端口
http_port 3128

# 设置对外显示的主机名
visible_hostname proxy.daoiqi.com


#############################################################################
###    squid缓存配置
#############################################################################
# 建议最少使用下面一行
hierarchy_stoplist cgi-bin ?

# 去除注释并调整下面这行语句来增加一个磁盘缓存目录
#cache_dir ufs /var/spool/squid 100 16 256

# 将核心输出保存在第一个缓存目录
coredump_dir /var/spool/squid

# 添加自己的刷新缓存的正则
refresh_pattern ^ftp:       1440    20% 10080
refresh_pattern ^gopher:    1440    0%  1440
refresh_pattern -i (/cgi-bin/|\?) 0 0%  0
refresh_pattern .       0   20% 4320

其中visible_hostname是我自己添加上去的,如果没有这个配置,会报warning。

默认的log路径为/var/log/squid/。可以进行查看一下相关的日志。

运行服务

service squid start # 启动squid
service squid stop 关闭squid
service squid restart 重启squid

以上部分基本上squid就可以正常工作了。

权限控制

默认的配置文件定义了局域网内用户都可以访问代理。但是在机房中,机器很多,他们都可能是处于内网上,这个需要注意。看看这些机器间是否有开启隔离,否则很危险。

对于云服务器来说这个应该还是安全的,他们会进行过滤。据我所知,目前云服务器上的隔离,主要是在宿主机(母机)上进行控制的,云服务器有一个内网IP和外网IP,对于内网IP的请求包,会在母机上使用iptables进行过滤。防止不同开发商的机器互相访问。

因此默认配置的局域网IP需要特别的注意一下。

附:我的squid配置

#############################################################################
# squid权限控制 acl和http_access
#############################################################################
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1

# 声明我的IP,来自我的IP,可以请求squid。注意一定要有掩码
acl myip src 121.14.10.9/32

# 局域网内的IP,看情况是否考虑需要
acl localnet src 10.0.0.0/8         # 一般大型企业或者学校使用,或者虚拟机中的网络
acl localnet src 172.16.0.0/12      # 一般很少用
acl localnet src 192.168.0.0/16     # 一般家用路由器或者虚拟机中的网络
acl localnet src fc00::/7           # IPv6
acl localnet src fe80::/10          # IPv6

# 定义ssl端口、一些安全端口和http访问的connect方法
acl SSL_ports port 443
acl Safe_ports port 80      # http
acl Safe_ports port 21      # ftp
acl Safe_ports port 443     # https
acl Safe_ports port 70      # gopher
acl Safe_ports port 210     # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280     # http-mgmt
acl Safe_ports port 488     # gss-http
acl Safe_ports port 591     # filemaker
acl Safe_ports port 777     # multiling http
acl CONNECT method CONNECT


# 推荐最小访问权限配置

# 允许本机管理缓存,其他的拒绝
http_access allow manager localhost
http_access deny manager

# 拒绝非安全端口
http_access deny !Safe_ports

# 拒绝connect到非ssl 443端口(上面定义了)
http_access deny CONNECT !SSL_ports

# 强烈建议去除注释。防止通过代理来访问本代理服务器上的web程序
# 以免认为是localhost用户访问web服务。
#http_access deny to_localhost

# 下面插入你自己的规则
#---------
# 允许我的IP访问squid
http_access allow myip


# 允许localhost和局域网内用户的请求,根据需要调整
http_access allow localnet
http_access allow localhost

# 最后,拒绝其他的对代理的访问
http_access deny all

#############################################################################
##   Squid的基本配置
#############################################################################
# 默认监听3128端口
http_port 3128

# 设置对外显示的主机名
visible_hostname proxy.daoiqi.com

# 对于本地配置hosts的网站,没有此配置,squid无法访问本地的hosts。
# 但是官网文档默认值就是/etc/hosts,我要显示声明才有效。
hosts_file /etc/hosts

#############################################################################
###    squid缓存配置
#############################################################################
# 建议最少使用下面一行
hierarchy_stoplist cgi-bin ?

# 去除注释并调整下面这行语句来增加一个磁盘缓存目录
#cache_dir ufs /var/spool/squid 100 16 256

# 将核心输出保存在第一个缓存目录
coredump_dir /var/spool/squid

# 添加自己的刷新缓存的正则
refresh_pattern ^ftp:       1440    20% 10080
refresh_pattern ^gopher:    1440    0%  1440
refresh_pattern -i (/cgi-bin/|\?) 0 0%  0
refresh_pattern .       0   20% 4320

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: Squid搭建正向代理 – https://www.chenyudong.com/archives/squid-forward-proxy.html

分类: 网络

Copyright © 2017 东东东 陈煜东的博客 粤ICP备13059639号-1

SITEMAP回到顶部 ↑