LNMP平台搭建---MySQL安装篇(附带多实例安装步骤)

17 篇文章 0 订阅
5 篇文章 0 订阅

       在前两篇中,安装了一个基本的Web服务器,但是只能提供静态网页查看,要做成动态网站,就必须要数据库配合其他编程语言支持了,这里先介绍MySQL数据库的安装。

       互联网架构中,把存储和数据库两个瓶颈搞定,其他的都很简单了,可见数据库的重要性,数据库(Database),简单来说,就是一个存放数据的仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织、存储的,我们可以通过数据库提供的多种方法来管理数据库里的数据。

  MySQL是一个开源的数据库,由瑞典MySQL AB公司开发与维护,现在属于Oracle公司,在互联网行业应用的很广泛,那为什么选择MySQL,可以有如下原因:

  1. 性能卓越、服务稳定、很少出现异常宕机
  2. 开放源代码且无版权制约(遵守GPL协议),自主性及使用成本低
  3. 历史悠久,社区及用户非常活跃,遇到问题,可以寻求帮助
  4. 体积小,安装使用简单,并且易于维护,安装及维护成本低
  5. 品牌口碑效应,使得企业无需考虑就直接用,LAMP、LNMP流行架构
  6. 支持多种操作系统,提供多种API接口,支持多种开发语言

         MySQL的发布采用双授权政策,分社区版和商业版,这两个版本又各自分四个版本依次发布:Alpha版、Beta版、RC版和GA版本。

         商业版与社区版的区别:

  1. 商业版本组织管理与测试环节控制更严格,稳定性方面,会比社区版更稳定
  2. MySQL是成熟产品,商业版与社区版之间性能差别不大
  3. 商业版不遵守GPL协议,社区版遵守GPL协议可以免费使用
  4. 使用商业版可以购买相关的服务,享受7*24小时技术支持以及定时打补丁等服务,但是用户必须为此支付服务费用
  5. 社区版本的维护服务只能靠社区提供

         Alpha版、Beta版、RC版和GA版本之间的说明及区别:

  1. Alpha版一般只在开发的公司内部运行,不对外公开,开源的会对外
  2. Beta版一般是完成功能的开发和所有的测试工作之后的产品,不会存在较大的功能或性能BUG,并且邀请或提供用户体验与测试,以便更全面地测试软件的不足之处或存在的问题
  3. RC版属于生产环境发布之前的一个小版本或称候选版,是根据Beta版本测试结果,收集到的BUG或缺陷之处等收集到的信息,进行修复和完善之后的一版产品。
  4. GA是软件产品正式发布的版本,也称生产版本的产品,一般情况下,企业的生产环境都会选择GA版。

          MySQL数据库版本命名由3个数字和一个后缀组成,如:mysql-5.7.19.tar.gz

          - 主版本号,描述了文件格式,所有版本5发行都有相同的文件格式

          - 发行级别,主版本号和发行级别一起构成发行序列号

          - 此次发行系列的版本号,随每个新分发版递增,通常会选择发行的最新版本

          每次更新后,版本字符串最后一个数字会递增,如对于前一个版本增加了新功能,版本字符串第二个数字递增,如文件格式改变,第一个数字会递增。

          企业生产环境MySQL版本选择建议:

  1. 选择开源的社区版的稳定版的GA版本
  2. 可以选择5.1或5.5、5.7
  3. 选择MySQL数据库GA版发布后6个月以上的GA版本
  4. 要选择前后几个月没有大的BUG修复的版本,而不是大量修复BUG的集中版本
  5. 最好向后较长时间没有更新发布的版本
  6. 要考虑开发人员开发程序使用的版本是否兼容你选的版本
  7. 作为内部开发测试数据库环境,跑大概3-6个月的时间
  8. 优先企业非核心业务采用较新版本的GA版本
  9. 向DBA高手请教

       下面来记录一下从源码安装的步骤,当然,MySQL也有其他安装方式,比如:

  1. yum安装,适用于对数据库要求不太高的场合,例如并发不大,公司内部、企业内部的一些应用场景。企业内部把源码编译后的版本制作成内部yum源码安装的方式除外。
  2. 常规方式,如"./configure; make; make install"(版本5.1及以前的安装模式)
  3. cmake方式(cmake, make, make install)- 5.5及以上的安装模式,使用机器数量少,多就麻烦了
  4. 二进制方式,免去了编译,与yum安装模式类似,与cmake安装方式安装性能区别不大

        使用yum下载安装rpm包时如果机器比较多,可以自己搭建yum源,然后定制rpm包,这样更方便于使用ssh多机自动安装。

  源码安装的mysql版本为5.5.32,使用cmake编译安装,下面开始记录安装步骤吧:

  1. 安装准备:

    MySQL5.5版本以上改为使用cmake工具编译安装了,安装之前需要安装依赖库ncurses-devel:

    1.1 cmake安装

      a. 解压: tar xf cmake-***

      b. cd cmake-**

      c. ./configure,结果如下:

      

      最后提示我们允许gmake即可。

      d. gmake

      e. sudo gmake install

      f. 查看是否安装成功:

      

    1.2 ncurses-devel安装: (小tips: 不要使用yum remove来删除软件,这样会删除一些依赖库,从而造成其他软件的使用出现问题!!)

        sudo yum install -y ncurses-devel

     sudo yum install -y libaio-devel    (多实例安装时还需要这个包)

  2. MYSQL安装:

    2.1 创建mysql用户和mysql用户组

        sudo groupadd mysql

        sudo  useradd mysql -s /sbin/nologin -M -g mysql

    2.2 解压mysql压缩包并进入mysql安装目录

cmake . -DCMAKE_INSTALL_PREFIX=/home/linjk/usr/mysql/mysql-5.5.32 \

-DMYSQL_DATADIR=/home/linjk/usr/mysql/mysql-5.5.32/data \

-DMYSQL_UNIX_ADDR=/home/linjk/usr/mysql/mysql-5.5.32/tmp/mysql.sock \

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_general_ci \

-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \

-DENABLE_LOCAL_INFILE=ON \

-DWITH_INNOBASE_STORAGE_ENGINE=1 \

-DWITH_FEDERATED_STORAGE_ENGINE=1 \

-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \

-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \

-DWITHOUT_PARTITION_STORAGE_ENGINE=1 \

-DWITH_FAST_MUTEXES=1 \

-DWITH_ZLIB=bundled \

-DENABLE_LOCAL_INFILE=1 \

-DWITH_READLINE=1 \

-DWITH_EMBEDDED_SERVER=1 \

-DWITH_DEBUG=0

        注意: "-Dxxxx"前面不能有空格,否则会提示目录找不到的错误

      (更多的编译选择可以从mysql官网查看:http://dev.mysql.com/doc/internals/en/cmake-howto-detailed.html)

    2.3 执行"make && sudo make install"进行mysql数据库安装,安装步骤可能时间有点长。使用的虚拟机,内存为2G,我make的时间大概8分钟,install大概10秒.

------> 如果是安装数据库多实例,则安装到这里,接下去采用新的步骤:

  说明:为了灵活性,采用多个启动程序结合多个配置文件的多实例安装方式

A. 创建目录

mkdir -p /mysql_data/{3306, 3308}/data ,执行后目录结构如下:

3306和3308分别对应两个实例的端口目录入口,实例的配置文件和启动文件会在对应端口目录下。

B. 复制配置文件并修改:

修改配置文件,内容如下,部分参数根据路径修改,另外要注意,server-id要不一样

 

[client]
#password	= your_password
port		= 3306
socket		= /mysql_data/3306/mysql.sock


[mysqld]
user = mysql
port		= 3306
socket		= /mysql_data/3306/mysql.sock
skip-external-locking
key_buffer_size = 16K
max_allowed_packet = 8M
table_open_cache = 4
sort_buffer_size = 1M
join_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 1M
net_buffer_length = 2K
thread_stack = 128K
basedir = /mysql/mysql-5.5.32
datadir=/mysql_data/3306/data
open_files_limit = 1024
back_log = 600
max_connections = 800
max_connect_errors = 300
table_cache = 614
external-locking = FALSE
thread_cache_size = 100
thread_concurrency = 2
query_cache_size = 2M
query_cache_limit = 1M
query_cache_min_res_unit = 2k
thread_stack = 192K
transaction_isolation = READ-COMMITTED
tmp_table_size = 2M
long_query_time = 1
log-error = /mysql_data/3306/error.log
log-slow-queries = /mysql_data/3306/slow.log
pid-file = /mysql_data/3306/mysql.pid
log-bin = /mysql_data/3306/mysql-bin
relay-log = /mysql_data/3306/relay-bin
relay-log-info-file = /mysql_data/3306/relay-log.info
binlog_cache_size = 1M
max_binlog_cache_size = 1M
max_binlog_size = 2M
expire_logs_days = 7
key_buffer_size = 16M
bulk_insert_buffer_size = 1M
#myisam_sort_buffer_size = 1M
#myisam_max_sort_file_size = 10G
#myisam_max_extra_sort_file_size = 10G
#myisam_repair_threads = 1
#myisam_recover


lower_case_table_names = 1
skip-name-resolve
slave-skip-errors = 1032,1062
replicate-ignore-db = mysql
# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (using the "enable-named-pipe" option) will render mysqld useless!
#
#skip-networking
server-id	= 1


# Uncomment the following if you want to log updates
#log-bin=mysql-bin


# binary logging format - mixed recommended
#binlog_format=mixed


# Causes updates to non-transactional engines using statement format to be
# written directly to binary log. Before using this option make sure that
# there are no dependencies between transactional and non-transactional
# tables such as in the statement INSERT INTO t_myisam SELECT * FROM
# t_innodb; otherwise, slaves may diverge from the master.
#binlog_direct_non_transactional_updates=TRUE


# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /mysql/mysql-5.5.32/data
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /mysql/mysql-5.5.32/data
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
#innodb_buffer_pool_size = 16M
#innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 5M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50


#innodb_additional_mem_pool_size = 4M
#innodb_buffer_pool_szie = 32M
#innodb_data_file_path = ibdata1:128M:autoextend
#innodb_file_io_threads = 4
#innodb_thread_concurrency = 8
#innodb_flush_log_at_trx_commit = 2
#innodb_log_buffer_size = 2M
#innodb_log_file_size = 4M
#innodb_log_files_in_group = 3
#innodb_max_dirty_pages_pct = 90
#innodb_lock_wait_timeout = 120
#innodb_file_per_table = 0




[mysqldump]
quick
max_allowed_packet = 2M


[mysql]
no-auto-rehash


[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M


[mysqlhotcopy]
interactive-timeout


[mysqld_safe]
log-error = /mysql_data/3306/mysql_3306.err
pid-file = /mysql_data/3306/mysqld.pid	= your_password
port		= 3306
socket		= /mysql_data/3306/mysql.sock


[mysqld]
user = mysql
port		= 3306
socket		= /mysql_data/3306/mysql.sock
skip-external-locking
key_buffer_size = 16K
max_allowed_packet = 8M
table_open_cache = 4
sort_buffer_size = 1M
join_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 1M
net_buffer_length = 2K
thread_stack = 128K
basedir = /mysql/mysql-5.5.32
datadir=/mysql_data/3306/data
open_files_limit = 1024
back_log = 600
max_connections = 800
max_connect_errors = 300
table_cache = 614
external-locking = FALSE
thread_cache_size = 100
thread_concurrency = 2
query_cache_size = 2M
query_cache_limit = 1M
query_cache_min_res_unit = 2k
thread_stack = 192K
transaction_isolation = READ-COMMITTED
tmp_table_size = 2M
long_query_time = 1
log-error = /mysql_data/3306/error.log
log-slow-queries = /mysql_data/3306/slow.log
pid-file = /mysql_data/3306/mysql.pid
log-bin = /mysql_data/3306/mysql-bin
relay-log = /mysql_data/3306/relay-bin
relay-log-info-file = /mysql_data/3306/relay-log.info
binlog_cache_size = 1M
max_binlog_cache_size = 1M
max_binlog_size = 2M
expire_logs_days = 7
key_buffer_size = 16M
bulk_insert_buffer_size = 1M
#myisam_sort_buffer_size = 1M
#myisam_max_sort_file_size = 10G
#myisam_max_extra_sort_file_size = 10G
#myisam_repair_threads = 1
#myisam_recover


lower_case_table_names = 1
skip-name-resolve
slave-skip-errors = 1032,1062
replicate-ignore-db = mysql
# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (using the "enable-named-pipe" option) will render mysqld useless!
#
#skip-networking
server-id	= 1


# Uncomment the following if you want to log updates
#log-bin=mysql-bin


# binary logging format - mixed recommended
#binlog_format=mixed


# Causes updates to non-transactional engines using statement format to be
# written directly to binary log. Before using this option make sure that
# there are no dependencies between transactional and non-transactional
# tables such as in the statement INSERT INTO t_myisam SELECT * FROM
# t_innodb; otherwise, slaves may diverge from the master.
#binlog_direct_non_transactional_updates=TRUE


# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /mysql/mysql-5.5.32/data
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /mysql/mysql-5.5.32/data
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
#innodb_buffer_pool_size = 16M
#innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 5M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50


#innodb_additional_mem_pool_size = 4M
#innodb_buffer_pool_szie = 32M
#innodb_data_file_path = ibdata1:128M:autoextend
#innodb_file_io_threads = 4
#innodb_thread_concurrency = 8
#innodb_flush_log_at_trx_commit = 2
#innodb_log_buffer_size = 2M
#innodb_log_file_size = 4M
#innodb_log_files_in_group = 3
#innodb_max_dirty_pages_pct = 90
#innodb_lock_wait_timeout = 120
#innodb_file_per_table = 0




[mysqldump]
quick
max_allowed_packet = 2M


[mysql]
no-auto-rehash


[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M


[mysqlhotcopy]
interactive-timeout


[mysqld_safe]
log-error = /mysql_data/3306/mysql_3306.err
pid-file = /mysql_data/3306/mysqld.pid

 

C. 创建启动文件,以3306实例启动脚本为例:

 

#!/bin/bash

#init
port=3306
mysql_user="root"
mysql_pwd="ljk121121"
CmdPath="/mysql/mysql-5.5.32/bin"
mysql_sock="/mysql_data/${port}/mysql.sock"

#startup
function_start_mysql()
{
    if [ ! -e "$mysql_sock" ]; then
        printf "Starting MySQL...\n"
        /bin/bash ${CmdPath}/mysqld_safe --defaults-file=/mysql_data/${port}/my.cnf 2>&1>/dev/null &
    else
        printf "MySQL is Running...\n"
        exit
    fi
}

#stop
function_stop_mysql()
{
    if [ ! -e "$mysql_sock" ]; then
        printf "MySQL is stopped..\n"
	exit
    else
	printf "Stopping MySQL...\n"
	${CmdPath}/mysqladmin -u ${mysql_user} -p ${mysql_pwd} -S /mysql_data/${port}/mysql.sock shutdown
    fi
}

#restart
function_restart_mysql()
{
    printf "Restarting MySQL...\n"
    function_stop_mysql
    sleep 2
    function_start_mysql
}

case $1 in
start)
    function_start_mysql
;;
stop)
    function_stop_mysql
;;
restart)
    function_restart_mysql
;;
*)
    printf "Usage:/mysql_data/${port}/mysql {start|stop|restart}\n"
esac

D. 授权目录

 

授权mysql用户访问mysql_data目录

chown -R mysql.mysql /mysql_data/

使mysql脚本可执行

  find /mysql_data/ -type f -name "mysql" | xargs chmod +x

E. 配置环境变量,步骤同下文的2.5步骤

F. 初始化多实例数据库文件,目的是创建基础的数据库文件,如mysql库表

cd /home/linjk/mysql-5.5.32/scripts/

chmod +x mysql_install_db

./mysql_install_db --basedir=/mysql/mysql-5.5.32/ --datadir=/mysql_data/3306/data --user=mysql

同理 ./mysql_install_db --basedir=/mysql/mysql-5.5.32/ --datadir=/mysql_data/3308/data --user=mysql

可以查看一下生成的数据表目录结构:

G. 初始化数据文件成后,启动数据库

若出现配置InnoDB参数失败造成启动错误,需要先删除data目录下的ib_data*文件

可以在mysql_3306.err看到启动日志输出:

3308实例类似启动即可,启动后监听接口如下,现在双实例启动MySQL数据库完成了:

附:

多实例使用mysql -u root -p xxx 无法登陆的:

对于多实例,登陆需要使用sock文件:mysql -S *.sock:

发现此时root用户还没有密码,修改密码:

/mysql/mysql-5.5.32/bin/mysqladmin -u root -S mysql.sock password 'ljk121121'   (需要先启动数据库才能更改,因为这里用到mysql.sock文件!!!)

然后可这样登陆:/mysql/mysql-5.5.32/bin/mysql -u root-p ljk121121 -S mysql.sock

新增MYSQL实例

H. 前面说到,采用多配置文件可以很灵活增加数据库,如果在一个my.cnf使用[mysql_multi]来配置多个实例,就需要重启,这样比较麻烦,现在就来新增一个实例,很简单,复制现有实例,修改一些参数就可以了:

然后初始化数据文件:

/mysql/mysql-5.5.32/scripts/mysql_install_db --basedir=/mysql/mysql-5.5.32/ --datadir=/mysql_data/3310/data/ --user=mysql

启动:

./mysql start

查看一下,实例启动成功:

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

  -------> 如果是常规安装数据库单实例,2.4步骤紧接2.3步骤即可,下文所有操作基于普通安装后操作:

    2.4 拷贝mysql的模板配置文件到/etc目录下:(mysql启动后会默认首先从/etc/my.cnf读取数据库目录,都找不到后就会使用编译时的参数进行启动)

                    (修改替换配置文件先备份这个习惯需要养成)

    

    2.5 为了方便使用mysql命令,需要配置环境变量

      echo 'export PATH=/home/linjk/usr/mysql/mysql-5.5.32/bin:$PATH' >> /etc/profile,如下示:

      

    2.6 初始化数据文件

      2.6.1 改变目录授权:

        sudo chown -R mysql.mysql /home/linjk/usr/mysql/mysql-5.5.32/data/

        sudo chmod -R 1777 /tmp/

      2.6.2 初始化数据文件:

        cd /home/linjk/usr/mysql/mysql-5.5.32/scripts/

        sudo ./mysql_install_db --basedir=/home/linjk/usr/mysql/mysql-5.5.32/ --datadir=/home/linjk/usr/mysql/mysql-5.5.32/data/ --user=mysql

      2.6.3 拷贝mysql启动脚本到/etc/init.d目录下:

        sudo cp support-files/mysql.server /etc/init.d/mysqld

        sudo chmod u+x /etc/init.d/mysqld

      2.6.4 启动数据库:

        执行:sudo /etc/init.d/mysqld start 即可

      2.6.5 使用命令“netstat -lntup | grep 3306”来确认一下是否启动成功。

      2.6.6 现在就可以使用命令"mysql"登录了

        

        如果出现无法登录,可以尝试kill掉mysqd进程,重新初始化一遍data文件。


    3. 安装完后可以继续的其他操作:

      3.1 删除空用户: delete from mysql.user where user=''; 提高安全性

      3.2 mysql.user表中,'::1'host名字是ipv6的,不需要也可以进行删除

      3.3 删除测试库: drop database test;

      3.4 初始化用户密码:

        /home/linjk/usr/mysql/mysql-5.5.32/bin/mysqladmin -u root password 'ljk121121'

      3.5 配置开机启动:sudo chkconfig mysqld on

      3.6 新增普通用户等个性化配置mysql即可

      3.7 为了不同用户操作安全,可以修改root用户登录后mysql的操作提示符,默认是'>',这样可以视觉上让你会注意敏感的update和delete操作:

  这种方式只是临时生效,为了长久生效,需要把这句放在my.cnf的'[mysql]'块里面

    下一篇,将介绍LNMP平台搭建的最后一步,增加WEB服务器的PHP支持。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值