MySQL有三个版本:二进制,源码包,RPM。

下面讲讲二进制包的安装过程

下载地址:

http://dev.mysql.com/downloads/mysql/

选择Linux-Generic

我这里选择的是mysql-5.6.28-linux-glibc2.5-x86_64.tar.gz

解压后,里面有个文件INSTALL-BINARY,其实给出了二进制包的部署过程

shell> groupadd mysql
shell> useradd -r -g mysql -s /bin/false mysql
shell> cd /usr/local
shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz
shell> ln -s full-path-to-mysql-VERSION-OS mysql
shell> cd mysql
shell> chown -R mysql .
shell> chgrp -R mysql .
shell> scripts/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql data
shell> bin/mysqld_safe --user=mysql &
# Next command is optional
shell> cp support-files/mysql.server /etc/init.d/mysql.server

相对于实际生产环境的部署,上面在初始化数据库的过程中少了一步-即指定配置文件,如果配置文件确认了,数据目录,日志目录都确认了,MySQL二进制版本的部署还是相当容易的一件事情。

下面写了一个脚本,基于后面提供的配置文件,执行格式如下:

sh 4.sh /root/mysql-5.6.28-linux-glibc2.5-x86_64.tar.gz /mysql3306 3306

其中 4.sh是脚本,/root/mysql-5.6.28-linux-glibc2.5-x86_64.tar.gz是二进制包的绝对路径,/mysql3306是basedir,3306是需设置的端口,

利用该脚本,只需要预先定义好配置文件,就可进行MySQL数据库的快速部署以及一台服务器上多个实例的部署。

#!/bin/bash
#需传入三个参数,第一个是mysql二进制压缩包的路径(绝对路径),譬如/root/mysql-5.6.-linux-glibc2.-x86_64.tar.gz,
#第二个是mysql的basedir,即需要创建在哪个目录下,第三个是设置的端口号
filename=$
basedir=$
port=$ groupadd mysql
useradd -r -g mysql -s /bin/false mysql
cd /usr/local
tar zxvf $filename
#file是获取mysql二进制包的名称,譬如mysql-5.6.-linux-glibc2.-x86_64.tar.gz
#dir是mysql压缩包的路径,不含包名本身,譬如/root,因为后续的配置文件my.cnf也是放到这个路径下
file=`basename $filename`
dir=`dirname $filename` #获取解压后的名字,即mysql-5.6.-linux-glibc2.-x86_64
after_tar_file=${file::-}
#将二进制包改名为 mysql+端口号,这样也便于后续的区分
mv $after_tar_file mysql"$port"
cd mysql"$port" #将原始的配置文件(需和mysql压缩包放到同层目录下,在本例中是/root/my.cnf)copy到解压并改名后的mysql二进制目录下,修改为my+端口号.cnf
cp $dir/my.cnf ./my"$port".cnf
user_cnf=my"$port".cnf
#下面主要是将原始配置文件中的路径修改为自己设定的路径,即传入的第二个参数
#整个的挑战在于传入的路径带有"/",在sed替换时会有问题,所有用了一个取巧的思路,即先将"/"替换为"|",进行sed替换,然后再将文件中的"|"修改回"/"
basedir_new=${basedir/\//|}
sed -i "s/\/project\/class2/$basedir_new/g" $user_cnf
sed -i "s/|/\//g" $user_cnf #设置server_id,取当前的秒值
server_id=`date +%s`
sed -i /^server_id/s/.*/server_id="$server_id"/ $user_cnf
#设置端口号
sed -i /^port/s/.*/port="$port"/ $user_cnf #创建必要的目录并修改权限
mkdir -p "$basedir"/mysql/{run,data,share,log,tmp} chown -R mysql $basedir
chgrp -R mysql $basedir #下面这个是非必要的,具体看后面的总结
cp share/english/errmsg.sys "$basedir"/mysql/share/ #初始化时--force也是非必要的,具体可见后面的总结
scripts/mysql_install_db --user=mysql --defaults-file="$user_cnf" --force
bin/mysqld_safe --defaults-file="$user_cnf" --user=mysql &

下面给出了配置文件的一个参考,大家可根据实际情况进行相应的修改

[mysqld_safe]
pid-file=/project/class2/mysql/run/mysqld.pid [mysql]
port=
prompt=\\u@\\d \\r:\\m:\\s>
default-character-set=utf8
no-auto-rehash [client]
port=
socket=/project/class2/mysql/run/mysql.sock [mysqld]
#dir
basedir=/project/class2/mysql
datadir=/project/class2/mysql/data
tmpdir=/tmp
lc_messages_dir=/project/class2/mysql/share
log-error=/project/class2/mysql/log/alert.log
slow_query_log_file=/project/class2/mysql/log/slow.log
general_log_file=/project/class2/mysql/log/general.log
socket=/project/class2/mysql/run/mysql.sock #innodb
innodb_data_home_dir=/project/class2/mysql/data
innodb_log_group_home_dir=/project/class2/mysql/data
innodb_data_file_path=ibdata1:2G;ibdata2:16M:autoextend
innodb_buffer_pool_size=10G
innodb_buffer_pool_instances=
innodb_log_files_in_group=
innodb_log_file_size=1G
innodb_log_buffer_size=200M
innodb_flush_log_at_trx_commit=
innodb_additional_mem_pool_size=20M
innodb_max_dirty_pages_pct=
innodb_io_capacity=
innodb_thread_concurrency=
innodb_read_io_threads=
innodb_write_io_threads=
innodb_open_files=
innodb_file_format=Barracuda
innodb_file_per_table=
innodb_flush_method=O_DIRECT
innodb_change_buffering=inserts
innodb_adaptive_flushing=
innodb_old_blocks_time=
innodb_stats_on_metadata=
innodb_read_ahead=
innodb_use_native_aio=
innodb_lock_wait_timeout=
innodb_rollback_on_timeout=
innodb_purge_threads=
innodb_strict_mode=
transaction-isolation=READ-COMMITTED #myisam
key_buffer=64M
myisam_sort_buffer_size=64M
concurrent_insert=
delayed_insert_timeout= #replication
master-info-file=/project/class2/mysql/log/master.info
relay-log=/project/class2/mysql/log/relaylog
relay_log_info_file=/project/class2/mysql/log/relay-log.info
relay-log-index=/project/class2/mysql/log/mysqld-relay-bin.index
slave_load_tmpdir=/project/class2/mysql/tmp
slave_type_conversions="ALL_NON_LOSSY"
slave_net_timeout=
skip-slave-start
sync_master_info=
sync_relay_log_info= #binlog
log-bin=/project/class2/mysql/log/mysql-bin
server_id=
binlog_cache_size=32K
max_binlog_cache_size=2G
max_binlog_size=500M
binlog-format=ROW
sync_binlog=
log-slave-updates=
expire_logs_days= #server
default-storage-engine=INNODB
character-set-server=utf8
lower_case_table_names=
skip-external-locking
open_files_limit=
safe-user-create
local-infile=
#sqlmod="STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE" log_slow_admin_statements=
log_warnings=
long_query_time=
slow_query_log=
general_log= query_cache_type=
query_cache_limit=1M
query_cache_min_res_unit=1K table_definition_cache= thread_stack=512K
thread_cache_size=
read_rnd_buffer_size=128K
sort_buffer_size=256K
join_buffer_size=128K
read_buffer_size=128K port=
skip-name-resolve
skip-ssl
max_connections=
max_user_connections=
max_connect_errors=
max_allowed_packet=128M
connect_timeout=
net_read_timeout=
net_write_timeout=
back_log=

总结:

在初始化的过程中,如果报以下错误:

FATAL ERROR: Neither host 'keepalived02' nor 'localhost' could be looked up with
/mysql3306/mysql/bin/resolveip
Please configure the 'hostname' command to return a correct
hostname.
If you want to solve this at a later stage, restart this script
with the --force option

但是在bash终端上执行hostname命令又确实有值返回,可加--force参数,如下所示:

scripts/mysql_install_db --user=mysql --defaults-file="$user_cnf" --force

如果报以下错误:

[ERROR] Can't find messagefile '/mysql3306/mysql/share/errmsg.sys'

可将二进制版本中share/english/errmsg.sys文件COPY到/mysql3306/mysql/share/下。

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

后续:这两个错误的原因都是因为basedir修改了,它默认是在二进制包中查找的。

如何利用脚本实现MySQL的快速部署以及一机多实例的部署的更多相关文章

  1. 利用脚本获取mysql的tps,qps等状态信息

    #!/bin/bash mysqladmin -uroot -p'123456' extended-status -i1|awk 'BEGIN{local_switch=0;print "Q ...

  2. 关于利用PHP访问MySql数据库的逻辑操作以及增删改查实例操作

    PHP访问MySql数据库 <?php //造连接对象$db = new MySQLi("localhost","root","",& ...

  3. shell脚本实现---Zabbix5.0快速部署

    shell脚本实现---Zabbix5.0快速部署 zabbix-server快速安装脚本 #!/bin/bash #Zabbix-Server 5.0#author:sunli#mail:sunli ...

  4. LoadRunner利用ODBC编写MySql脚本

    最近做了几周的LoadRunner测试,有一些心得,记录下来,以便以后查找. LoadRunner测试数据库是模拟客户端去连接数据库服务器,因此,需要协议(或者说驱动的支持).LoadRunner本身 ...

  5. 【原创】Innodb中mysql如何快速删除2T的大表

    小漫画 来,先来看小漫画陶冶一下情操 OK,这里就说了.假设,你有一个表erp,如果你直接进行下面的命令 drop table erp 这个时候所有的mysql的相关进程都会停止,直到drop结束,m ...

  6. Innodb中MySQL如何快速删除2T的大表

    转自:http://database.51cto.com/art/201808/582324.htm OK,这里就说了.假设,你有一个表erp,如果你直接进行下面的命令: drop table erp ...

  7. 阿里云数据库MySQL版快速上手!

    MySQL是全球最受欢迎的开源数据库,其在各Web应用中均有广泛部署.阿里云数据库MySQL版基于Alibaba的MySQL源码分支,经过双11高并发.大数据量的考验,拥有优良的性能和吞吐量.除此之外 ...

  8. MySQL 5.7 多实例安装部署实例

    1. 背景  MySQL数据库的集中化运维,可以通过在一台服务器上,部署运行多个MySQL服务进程,通过不同的socket监听不同的服务端口来提供各自的服务.各个实例之间是相互独立的,每个实例的dat ...

  9. 利用XtraBackup给MYSQL热备(基于数据文件)

    利用XtraBackup给MYSQL热备(基于数据文件) By JRoBot on 2013 年 11 月 26 日 | Leave a response 利用XtraBackup给MYSQL热备(基 ...

随机推荐

  1. 关于 IE6、 IE7兼容性总结(转)

    其实浏览器的不兼容,我们往往是各个浏览器对于一些标准的定义不一致导致的,因此,我们可以进行一些初始化,很多问题都很轻松解决. 下面是14条特殊情况仅供参考: 1. 文字本身的大小不兼容.同样是font ...

  2. sql 更新列表中最老的一条数据

    今天组长给个任务说要给摄像头触发一个列表.让缓存5条数据,每次摄像头触发更新一条,丢掉最老的一条数据.原来的update是直接更新掉一条,没带缓存的.然后搞了个sql语句,是这样的: UPDATE C ...

  3. Web服务网站故障分析常用的命令

    1.查看TCP连接状态netstat -nat |awk ‘{print $6}’|sort|uniq -c|sort -rn netstat -n | awk ‘/^tcp/ {++S[$NF]}; ...

  4. js中几种常用的输出方式

    1.alert("要输出的内容"); ->在浏览器中弹出一个对话框,然后把要输出的内容展示出来 ->alert都是把要输出的内容首先转换为字符串然后在输出的 2.doc ...

  5. java执行linux命令

    package com.gtstar.collector; import java.io.BufferedReader;import java.io.IOException;import java.i ...

  6. pythonchallenge 解谜 Level 3

    第三关. 问题的解法在于正则表达式. 首先...你应该能找到需要正则的字符在哪里...那就好了! 题意就是说: One small letter, surrounded by EXACTLY thre ...

  7. python Django 进阶篇

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

  8. centos7开机自动联网设置

    /etc/sysconfig/network-scripts/目录下ifcfg-eth0这个 文件,把ONBOOT="no"改为yes

  9. C# 5.0 异步编程

    在C#5.0中,增加了一个强大的新功能--异步编程.( .NET FrameWork4.5  版本) 它以两个新型关键字出现: ·async ·await 1.Async方法有三种返回类型: asyn ...

  10. Sublime Text 3 配置和使用方法

    下载: Sublime Text 3 官方下载地址 Sublime Text 3 汉化破解版 资料: Sublime Text 非官方文档   技巧 -用户或-User后缀的菜单项,其对应的配置文件都 ...