【小白福利—初级DBA入门必看】MySQL常用工具介绍(一)——安装篇

之前Amy为大家更新了基于MySQL的分布式事务数据库的开发规范和MySQL数据类型测试点此查看系列文章,考虑到很多刚入门的初级DBA可能对MySQL工具的使用也不甚熟练,Amy决定接下来为大家更新一系列介绍MySQL的常用工具的文章,让大家对MySQL的使用更加得心应手。

今天先更新MySQL工具的几种安装方式,大家可以自由选择哦。

  • 使用yum或rpm在linux安装、初始化、使用MySQL 5.7

1.1 安装部分
1.1.1 安装过程
yum安装方式
#先通过wget从官网下载相应平台的MySQL的yum仓库,然后执行安装。
#此步骤自动配置好MySQL的yum源,后续可以方便地安装MySQL官方相关软件。
wget: https://repo.mysql.com//mysql80-community-release-el7-2.noarch.rpm
yum -y localinstall mysql80-community-release-el7-2.noarch.rpm

#由于该仓库默认启用的是mysql80库,想要安装mysql57还需将mysql80库禁用并将mysql57启用。这里使用如下方式修改仓库配置
yum-config-manager --disable mysql80-community
yum-config-manager --enable mysql57-community

#安装MySQL,这会依次安装:
#mysql-community-common #cs共同的错误信息和字符集包
#mysql-community-libs #共享客户端库,会替换mariadb-libs
#mysql-community-client #客户端包
#mysql-community-server
#mysql-community-libs-compat #会替换mariadb-libs
yum install mysql-community-server

rpm安装方式
#通过官网下载等方式获取对应平台以下几个rpm包,并将其上传至所要安装的平台上,执行以下命令,则会依次安装好这几个包
#mysql-community-common #cs共同的错误信息和字符集包
#mysql-community-libs #共享客户端库,会替换mariadb-libs
#mysql-community-client #客户端包
#mysql-community-server
#mysql-community-libs-compat #会替换mariadb-libs
yum -y install mysql-community-{server,client,common,libs}-* mysql-5.* --exclude=‘minimal

1.1.2 安装说明
安装布局:即安装完毕后会创建的文件或目录。若安装完毕后不修改配置直接启动服务器,则数据目录等设置和下表相同。

安装会覆盖/etc/my.cnf的内容,里面启用了几个重要参数,和上述布局相同。若愿意,可以在启动服务器前,修改该配置文件,如将数据目录放置在其它地方:
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
#Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
安装完毕,MySQL还会给我们创建一个mysql用户和mysql基本组
[root@centip10 ~ 20:59:12]# cat /etc/passwd | grep mysql
mysql❌27:27:MySQL Server:/var/lib/mysql:/bin/false

1.2 yum、rpm初始化部分及启动
对于yum和rpm方式安装的MySQL,可以在安装后直接启动服务器(如centos6可以使用service mysqld start;centos7还可以使用systemctl start mysqld)。
若启动时检测到数据目录为空或不存在,则会初始化数据目录:
1)初始化服务器;
2)在数据目录中生成SSL证书和密钥文件;
3)安装并启用validate_password:要求密码小写、大写、数字、特殊字符都存在,长度不小于8
4)创建’root’@'localhost超级用户帐户。临时密码存储在错误日志文件中,查看命令为:
grep ‘temporary password’ /var/log/mysqld.log

注意:对于5.6,该过程调用mysql_install_db,初始密码为空。当然也可以手动先初始化数据目录,mysql_install_db --random-passwords,给root账户生成一个随机密码,密码保存在用户主目录下.mysql_secret。
1.3 使用mysql连接服务器并修改密码
使用mysql -p命令,并输入由1.2中找到的密码,当可以成功连接到服务器,此后必须先修改密码才能执行其他语句:
ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘MyNewPass4!’; #5.6要使用SET PASSWORD = PASSWORD(‘new_password’);
quit #退出mysql

**- 2 .使用通用二进制安装、源代码在linux安装、初始化、使用MySQL 5.7

2.1 安装部分**
通用二进制安装部分
#以从官网下载等方式获取平台对应的通用二进制包,并上传至平台,在该包目录执行解压将其解压至/usr/local/目录,重命名为mysql
tar zxvf mysql-5.7.26-el7-x86_64.tar.gz -C /usr/local/
rm -r /usr/local/mysql
mv /usr/local/mysql-5.7.26-el7-x86_64 /usr/local/mysql

源安装部分
#先安装依赖包
yum -y install cmake libaio libaio-devel #所有平台上的构建框架,mysql要求cmake检查libaio和libaio-devel的存在
yum -y install make #一个良好的make程序,官方建议使用GNU make 3.75及更高版本
yum -y install gcc gcc-c++ #一个有效的ANSI C ++编译器,如默认情况下cmake会检查受支持的编译器的最低版本:
#vs2013、gcc4.4或clang3.3、ds12.5。-DFORCE_UNSUPPORTED_COMPILER=ON时可以使cmake跳过此检查。
#Boost C++ libraries用来创建mysql,必须安装Boost 1.59.0。通过cmake . -DWITH_BOOST=/usr/local/boost_1_59_0通知其位置。
#这里我们直接下载官方带有boost的源码包,故不需要安装boost
yum -y install ncurses ncurses-devel bison bison-devel git # 其它安装依赖包

#获取并解压分发包:这里直接下载带boost的版本,否则还需自己下载boost并放在对应位置源码包的顶层目录
VERSION=5.7.26
tar zxvf mysql-boost-KaTeX parse error: Expected 'EOF', got '#' at position 16: VERSION.tar.gz #̲配置分发: cd mysql-VERSION
mkdir bld
cd bld
cmake… -DWITH_BOOST=…/boost -DBUILD_CONFIG=mysql_release -DWITH_DEBUG=OFF
#cmake使用默认值,只需指定所在位置。-G可以指定开发环境,如windows上cmake … -G “Visual Studio 12 2013 Win64”
#还可以添加更多选项,如
#-DBUILD_CONFIG=mysql_release: Configure the source with the same build options used by Oracle to produce binary distributions for official MySQL releases.必须也安装libaio
#-DCMAKE_INSTALL_PREFIX=dir_name: Configure the distribution for installation under a particular location.
#-DCPACK_MONOLITHIC_INSTALL=1: Cause make package to generate a single installation file rather than multiple files.
#-DWITH_DEBUG=1: Build the distribution with debugging support.
#For a more extensive list of options, see Section 2.9.4, “MySQL Source-Configuration Options”.
#要查看配置
#shell> cmake … -L # overview
#shell> cmake … -LH # overview with help text
#shell> cmake … -LAH # all params with help text
#shell> ccmake … # interactive display
#编译错误要先删除bld目录下的该文件rm CMakeCache.txt;

#建立分发并安装分发
make & make install
#make VERBOSE=1可以打印过程中每个编译命令
#make install DESTDIR="/opt/mysql" 安装在特定目录,默认/usr/local/mysql
#make package生成一个或多个.tar.gz通用二进制包。若cmake -DCPACK_MONOLITHIC_INSTALL=1则操作产生单个文件,否则多个
#成功执行到此处,相当于把通用二进制版本放到了/user/local/mysql里,里面也有bin等目录
2.2 一些必要步骤及初始化、启动过程
#安装一些依赖包
rpm -qa | grep mariadb | xargs rpm -e --nodeps #最好是删除预装的mariadb,否则可能因为共享库的原因导致mysql服务器启动失败
yum install libaio #必须,若不安装,则数据目录初始后和后续服务器启动步骤将失败
yum -y install numactl.x86_64 #5.7.19始,通用linux构建包含对非统一内存NUMA的支持,依赖于libnuma
#设定一些常用的参数
cat > /etc/my.cnf < [mysqld]
#实例唯一
server-id =3306
port =3306
socket =/tmp/mysql.sock
datadir =/usr/local/mysql/data/
general-log-file =/usr/local/mysql/log/general.log
slow-query-log-file =/usr/local/mysql/log/slow.log
log-bin =/usr/local/mysql/repl/binlog
relay-log =/usr/local/mysql/repl/relaylog
#通用属性

plugin-load ="validate_password=validate_password.so"
basedir                         =/usr/local/mysql/
#read-only                      =1
user                            =mysql
lower_case_table_names=1
character-set-server            =utf8mb4
default-storage-engine          =INNODB
secure-file-priv='/usr/local/mysql/'
explicit_defaults_for_timestamp=ON
#sql_mode=default
event-scheduler                 =1
log-bin-trust-function-creators =1
group-concat-max-len            =102400
validate-password               =ON
validate_password_length=8
validate_password_policy=0

log-output                      =FILE
general-log
slow-query-log
long_query_time =1

gtid-mode                       =ON
enforce-gtid-consistency        =true

binlog-format                   =ROW
expire-logs-days                =70
max-binlog-size                 =1024M
log-slave-updates               =1

skip-slave-start
relay-log-recovery              =ON
slave-parallel-type             =LOGICAL_CLOCK
slave-parallel-workers          =20
replicate-ignore-db             =test

relay-log-info-repository       =TABLE
master-info-repository          =TABLE

EOFcnf

#创建mysql用户组
groupadd mysql
useradd -r -g mysql -s /bin/false mysql

#清空数据目录等,创建必要的目录
myfdir=/usr/local
rm -rf $myfdir/mysql/data $myfdir/mysql/log $myfdir/mysql/repl $myfdir/mysql/ib
mkdir -p $myfdir/mysql/log
mkdir -p $myfdir/mysql/repl
mkdir -p $myfdir/mysql/ib

#赋予相关文件或目录mysql属主和适当的权限
chown -R mysql:mysql /etc/my.cnf
chmod -R 750 /etc/my.cnf
chown -R mysql:mysql $myfdir/mysql/
chmod -R 750 $myfdir/mysql/

#执行初始化
mypw=$myfdir/mysql/bin/mysqld --initialize --user=mysql --basedir=$myfdir/mysql --datadir=$myfdir/mysql/data 2>&1 |grep "A temporary password is generated for"
mypw=${mypw#*: }
echo $mypw #如果初始化成功,应该能看到一个复杂的密码,这是mysql账户root@localhost的过期的初始密码

#添加服务、创建一些软连接以便能更好的调用mysql软件
ln -sf $myfdir/mysql/support-files/mysql.server /etc/init.d/mysqld #使mysqld可以作为服务启动
chmod +x /etc/init.d/mysqld #使mysqld可以作为服务启动
ln -sf $myfdir/mysql/support-files/mysqld_multi.server /etc/init.d/mysqldm
chmod +x /etc/init.d/mysqldm
ln -sf $myfdir/mysql /mysql
ln -sf $myfdir/mysql/bin/* $myfdir/bin/
ln -sf $myfdir/mysql/lib/libmysqlclient.so* /usr/lib64/

#启动mysqld服务器
service mysqld start #或者使用mysqld_safe --user=mysql &

2.3 使用mysql连接服务器并修改root账号的初始密码
mysql --password=$mypw --connect-expired-password -e “ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘ztdmimadl1MY’;”

  • 3 linux上四种安装方式的比较

yum和rpm的本质都是安装几个rpm包,区别在于使用yum安装时需要访问公网访问官方下载地址下载安装所需的文件,其安装过程、mariadb库的自动替换、安装布局、服务自启等设定都是一样的。此外,rpm包可以选择使用yum命令或rpm -ivh命令安装,使用rpm安装需要自己解决潜在的依赖包问题,如libaio。
源代码和通用二进制的区别主要在于:使用源代码安装可以设定编译选项,并且编译过程耗时较长。实际上,通用二进制包不过是官方根据各平台优化配置后的编译好的二进制文件,我们使用源代码自定义编译的目标就是生成与通用二进制包相似的二进制文件。故此,编译好源码后,通用二进制安装和源代码编译好的二进制的安装过程几乎一致。
一般来说,我们可以使用官方提供的通用二进制包进行安装,其优势在于安装位置比较集中,不像rpm安装默认布局一样分散,更加便于管理,对系统文件系统的影响较小。
特殊情况可以考虑使用源码安装,源码安装有其优势:
1)可自定义mysql组件的安装位置
2)可加入标准二进制分布没有的功能,如最为常用的
-DWITH_LIBWRAP=1 for TCP wrappers support.
-DWITH_ZLIB={system|bundled} for features that depend on compression
-DWITH_DEBUG=1 for debugging support
For additional information, see Section 2.9.4, “MySQL Source-Configuration Options”.
3)删除某些功能,按需安装,最小化安装:如可以不使用某些字符集
4)修改某些源代码来自定义软件
5)源分发比二进制安装包含更多测试、例子
4 附:centos6或7自动化安装MySQL脚本
脚本文件:
使用方式:sh install_mysql_auto.sh {yum | rpm | bin}
注意事项:
1.使用脚本前,请将先前mysql的安装、进程、服务启动项、路径等清理干净。最好在一个没有安装过mysql的电脑使用
2.使用yum安装,需要外网,将使mysqld安装到最新的5.7版本;
使用rpm安装,需将较新5.7版本的mysql-community-common、mysql-community-libs、mysql-community-client、mysql-community-server、mysql-community-libs-compat包上传至工作目录;
使用bin安装,需将grep mysql-5.7*-el*64.tar.gz能识别的包(如mysql-5.7.26-el7-x86_64.tar.gz)上传至工作目录
3.脚本将删除/data/mysql/data /data/mysql/log /data/mysql/repl /data/mysql/ib原有内容,使用bin还会删除/usr/local/mysql
4.脚本将修改/etc/security/limits.conf、/etc/sysctl.conf等系统文件,关闭防火墙、selinux,以及其他一些系统相关操作
5.脚本将重写/etc/my.cnf。若有需要,可以先备份。此外,最好更名备份其他位置的配置文件,以免脚本初始化服务器等出错。

脚本内容:

#!/bin/sh
#*************************
#Created By:    xxxx
#*************************
#

#判断使用方式是否正确

case "$1" in
    'yum' | 'rpm' | 'bin' )
        ;;
    *)
        echo "error:Usage: $0 {yum|rpm|bin}" >&2
		exit 1
        ;;
esac

#提醒安装脚本的注意事项和对系统的影响,4和5中的一些配置可以自己修改
cat << EOFreadme
1.使用脚本前,请将先前mysql的安装、进程、服务启动项、路径等清理干净。最好在一个没有安装过mysql的电脑使用
2.使用yum安装,需要外网,将使mysqld安装到最新的5.7版本;
使用rpm安装,需将较新5.7版本的mysql-community-common、mysql-community-libs、mysql-community-client、mysql-community-server、mysql-community-libs-compat包上传至工作目录;
使用bin安装,需将grep mysql-5.7*-el*64.tar.gz能识别的包(如mysql-5.7.26-el7-x86_64.tar.gz)上传至工作目录
若继续执行,则
3.脚本将删除/data/mysql/data /data/mysql/log /data/mysql/repl /data/mysql/ib原有内容,使用bin还会删除/usr/local/mysql
4.脚本将修改/etc/security/limits.conf、/etc/sysctl.conf等系统文件,关闭防火墙、selinux,以及其他一些系统相关操作
5.脚本将重写/etc/my.cnf。若有需要,可以先备份。此外,最好更名备份其他位置的配置文件,以免脚本初始化服务器等出错。

EOFreadme
read -n1 -p "Do you want to continue [Y/N]?" answer
case $answer in
	Y | y )
		echo -e "\nfine, continue";;
	*)
		echo -e "\nthe script will exit with 1"
		exit 1;;
esac

#yum方式安装mysql
install_mysql_yum() {
echo “installing mysql throught yum”
wget https://repo.mysql.com//mysql80-community-release-el7-2.noarch.rpm
yum -y localinstall mysql80-community-release-el7-2.noarch.rpm

#由于该仓库默认启用的是mysql80库,想要安装mysql57还需将mysql80库禁用并将mysql57启用。这里使用如下方式修改仓库配置
yum-config-manager --disable mysql80-community
yum-config-manager --enable mysql57-community

#安装MySQL,这会依次安装:
#mysql-community-common  #cs共同的错误信息和字符集包
#mysql-community-libs  #共享客户端库,会替换mariadb-libs
#mysql-community-client #客户端包
#mysql-community-server 
#mysql-community-libs-compat   #会替换mariadb-libs
yum -y install mysql-community-server
rpm -qa |grep mysql-community-server-5.7
if [  "$?" != 0 ];then echo "error:something wrong during the installation for mysql's rpm";exit 1; fi
mysqld=/usr/sbin/mysqld
echo "mysql5.7 installed successfully"

}

#rpm包方式安装mysql
install_mysql_rpm() {
echo “installing mysql throught rpm”
#通过官网下载等方式获取对应平台以下几个rpm包,并将其上传至所要安装的平台上,执行以下命令,则会依次安装好这几个包
#mysql-community-common #cs共同的错误信息和字符集包
#mysql-community-libs #共享客户端库,会替换mariadb-libs
#mysql-community-client #客户端包
#mysql-community-server
#mysql-community-libs-compat #会替换mariadb-libs
yum -y install mysql-community-{server,client,common,libs}-5.7el64 --exclude=‘minimal
rpm -qa |grep mysql-community-server-5.7
if [ “$?” != 0 ];then echo “error:something wrong during the installation for mysql’s rpm”;exit 1; fi
mysqld=/usr/sbin/mysqld
echo “mysql5.7 installed successfully”
}

#通用二进制方式安装mysql

install_mysql_bin() {
    echo "installing mysql throught general binary"
	myfdir=/usr/local
	pkg=`ls | grep mysql-5.7*-el*64.tar.gz`
	if [ -z $pkg ];then echo "error:you havn't got a correct binary package(like:mysql-5.7.*-el7-x86_64.tar.gz) in the work directory";exit 1; fi
	rm -rf $myfdir/${pkg%.tar.gz} $myfdir/mysql
	tar zxvf $pkg --directory=$myfdir
	mv $myfdir/${pkg%.tar.gz}  $myfdir/mysql
	if [  "$?" != 0 ];then echo "error:something wrong during the decompression";exit 1; fi
	#rm -f pkg
	mysqld=$myfdir/mysql/bin/mysqld
	rpm -qa | grep mariadb | xargs rpm -e --nodeps
	yum -y install libaio
	yum -y install numactl.x86_64
	groupadd mysql
	useradd -r -g mysql -s /bin/false mysql

ln -sf $myfdir/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
ln -sf $myfdir/mysql/bin/* $myfdir/bin/
ln -sf $myfdir/mysql/lib/libmysqlclient.so*  /usr/lib64/

chkconfig --add mysqld
chkconfig mysqld on
echo "mysql5.7 installed successfully"
}

#根据选择,调用相应的安装方式

case "$1" in
    'yum' )
		install_mysql_yum
        ;;
    'rpm' )
		install_mysql_rpm
        ;;
    'bin' )
		install_mysql_bin
        ;;
*)
    echo "error:Usage: $0 {yum|rpm|bin}" >&2
	exit 1
    ;;

esac

#修改用户资源限制

cat > /etc/security/limits.conf <

#修改内核参数设置

cat > /etc/sysctl.conf <

#关闭selinux
setenforce 0
sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/’ /etc/selinux/config

#调整ssh设置
sed -i ‘s/#UseDNS ./UseDNS no/g’ /etc/ssh/sshd_config
sed -i ‘s/#GSSAPIAuthentication ./GSSAPIAuthentication no/g’ /etc/ssh/sshd_config

#将磁盘io调度方式设置为deadline

echo deadline>/sys/block/sda/queue/scheduler
echo deadline>/sys/block/sdb/queue/scheduler
echo deadline>/sys/block/sdc/queue/scheduler
echo deadline>/sys/block/sdd/queue/scheduler
if [ `cat /etc/redhat-release|sed -r 's/.* ([0-9]+)\..*/\1/'` = "7" ];then 
	grubby --update-kernel=ALL --args="elevator=deadline"
fi

#关闭防火墙,防止自启

service iptables stop 2> /dev/null
service ip6tables stop 2> /dev/null
service firewalld stop 2> /dev/null
chkconfig iptables off 2> /dev/null
chkconfig ip6tables off 2> /dev/null
chkconfig firewalld off 2> /dev/null

#配置mysql的选项文件

cat > /etc/my.cnf <

#为初始化创建相应的目录,防止初始化或启动mysql失败
rm -rf /data/mysql/data /data/mysql/log /data/mysql/repl /data/mysql/ib #实际上只要保证数据目录为空或不存在,其他目录存在即可
mkdir -p /data/mysql/data
mkdir -p /data/mysql/log
mkdir -p /data/mysql/repl
mkdir -p /data/mysql/ib

#为相应目录、文件设定mysql用户和正确的读写权限
chown -R mysql:mysql /etc/my.cnf
chmod -R 750 /etc/my.cnf
chown -R mysql:mysql /data/mysql/
chmod -R 750 /data/mysql/

#开始初始化数据目录
mypw=$mysqld --initialize --user=mysql 2>&1 |grep "A temporary password is generated for" #这里没有给出–datadir,故配置文件中必须给出
mypw=${mypw#*: }
if [ -z $mypw ]; then “error:something wrong when initialize mysql”;exit 1;fi
echo $mypw

#启动mysql
service mysqld start
if [ “$?” != 0 ];then echo “error:something wrong during starting mysqld”;exit 1; fi
sleep 1
service mysqld status

#修改root密码,创建一些常用账户并赋予权限
addsalt=ztd123 #注意设定加盐长度等使其符合密码验证插件的要求

mysql --protocol=tcp -P3306 -uroot --password=$mypw --connect-expired-password -e "
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root$addsalt';
update mysql.user set mysql.user.Host='%' where mysql.user.User='root';

CREATE USER 'application'@'%' IDENTIFIED BY 'application$addsalt';
GRANT DELETE,UPDATE,INSERT,SELECT,EXECUTE ON *.* TO 'application'@'%';

CREATE USER 'readonly'@'%' IDENTIFIED BY 'readonly$addsalt';
GRANT SELECT ON *.* TO 'readonly'@'%';

CREATE USER 'replication'@'%' IDENTIFIED BY 'replication$addsalt';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replication'@'%';

CREATE USER 'monitor'@'%' IDENTIFIED BY 'monitor$addsalt';
GRANT SUPER,PROCESS,SELECT ON *.* TO 'monitor'@'%';

CREATE USER 'backup'@'%' IDENTIFIED BY 'backup$addsalt';
GRANT SELECT,RELOAD,PROCESS,REPLICATION CLIENT ON *.* TO 'monitor'@'%';

CREATE USER 'shutdown'@'localhost' IDENTIFIED BY 'shutdown$addsalt'; 
GRANT SHUTDOWN ON *.* TO 'shutdown'@'localhost';
flush privileges;
"

#验证root密码是否修改成功,若能成功进入mysql交互界面,则已成功安装并配置好mysql。
mysql --protocol=tcp -P3306 -uroot -proot$addsalt

好了!以上就是关于如何安装的详细步骤,完结撒花~
如果看的还不过瘾可以浏览之前的文章——MySQL数据类型测试系列文章和分布式事务数据库MySQL数据库开发规范
see you~

你可能感兴趣的:(【小白福利—初级DBA入门必看】MySQL常用工具介绍(一)——安装篇)