如何利用脚本实现MySQL的快速部署以及一机多实例的部署
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的快速部署以及一机多实例的部署的更多相关文章
- 利用脚本获取mysql的tps,qps等状态信息
#!/bin/bash mysqladmin -uroot -p'123456' extended-status -i1|awk 'BEGIN{local_switch=0;print "Q ...
- 关于利用PHP访问MySql数据库的逻辑操作以及增删改查实例操作
PHP访问MySql数据库 <?php //造连接对象$db = new MySQLi("localhost","root","",& ...
- shell脚本实现---Zabbix5.0快速部署
shell脚本实现---Zabbix5.0快速部署 zabbix-server快速安装脚本 #!/bin/bash #Zabbix-Server 5.0#author:sunli#mail:sunli ...
- LoadRunner利用ODBC编写MySql脚本
最近做了几周的LoadRunner测试,有一些心得,记录下来,以便以后查找. LoadRunner测试数据库是模拟客户端去连接数据库服务器,因此,需要协议(或者说驱动的支持).LoadRunner本身 ...
- 【原创】Innodb中mysql如何快速删除2T的大表
小漫画 来,先来看小漫画陶冶一下情操 OK,这里就说了.假设,你有一个表erp,如果你直接进行下面的命令 drop table erp 这个时候所有的mysql的相关进程都会停止,直到drop结束,m ...
- Innodb中MySQL如何快速删除2T的大表
转自:http://database.51cto.com/art/201808/582324.htm OK,这里就说了.假设,你有一个表erp,如果你直接进行下面的命令: drop table erp ...
- 阿里云数据库MySQL版快速上手!
MySQL是全球最受欢迎的开源数据库,其在各Web应用中均有广泛部署.阿里云数据库MySQL版基于Alibaba的MySQL源码分支,经过双11高并发.大数据量的考验,拥有优良的性能和吞吐量.除此之外 ...
- MySQL 5.7 多实例安装部署实例
1. 背景 MySQL数据库的集中化运维,可以通过在一台服务器上,部署运行多个MySQL服务进程,通过不同的socket监听不同的服务端口来提供各自的服务.各个实例之间是相互独立的,每个实例的dat ...
- 利用XtraBackup给MYSQL热备(基于数据文件)
利用XtraBackup给MYSQL热备(基于数据文件) By JRoBot on 2013 年 11 月 26 日 | Leave a response 利用XtraBackup给MYSQL热备(基 ...
随机推荐
- Android 网络状态检测
package com.example.administrator.yunstore.net; import android.app.AlertDialog; import android.conte ...
- Python之路Day16--JavaScript(二)
本节内容: 1.上节内容回顾 2.JavaScript补充 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 一.上节内容回顾 1.作业问题: a.页面布局不好 ...
- Maven 上传 jar包 到私服
登录Nexus后,点击右侧的“Repositories”,显示当前Nexus所管理的Repository, 默认情况下Nexus为我们创建了以下主要的Repository: 1.PublicRepos ...
- ThinkPHP5 助手函数
对于ThinkPHP5.0以前的版本,助手函数全部是单字母函数,但到ThinkPHP5之后,使用如下函数来代替单字母函数: 最常用: /** * 实例化Model * @param string $n ...
- 安装subversion
安装subversion需要依赖apr.apr-util.sqlite 下载安装包,放在/usr/file目录 subversion-1.9.4.tar.gz apr-1.5.2.tar.gz apr ...
- TaintDroid剖析之Native方法级污点跟踪分析
1.Native方法的污点传播 在前两篇文章中我们详细分析了TaintDroid对DVM栈帧的修改,以及它是如何在修改之后的栈帧中实现DVM变量级污点跟踪的.现在我们继续分析其第二个粒度的污点跟踪—— ...
- 使用vbs脚本进行批量编码转换
使用vbs脚本进行批量编码转换 最近需要使用SourceInsight查看分析在Linux系统下开发的项目代码,我们知道Linux系统中文本文件默认编码格式是UTF-8,而Windows中文系统中的默 ...
- 《R in Action》读书笔记(3) 数据变换
MindMapper 原文件
- .NET中STAThread和MTAThread
本文讨论在.NET中使用进程内COM组件时的公寓模型,以一个示例直观演示STAThread和MTAThread的作用和区别. 1. COM中的公寓 1.1 基本规则 公寓是COM组件的运行环境,日常生 ...
- ASP.NET Web API路由系统:Web Host下的URL路由
ASP.NET Web API提供了一个独立于执行环境的抽象化的HTTP请求处理管道,而ASP.NET Web API自身的路由系统也不依赖于ASP.NET路由系统,所以它可以采用不同的寄宿方式运行于 ...