2.1 MySQL介绍
MySQL历史
- 1979年:TcX公司Monty Widenius,Unireg
- 1996年:发布MySQL1.0,Solaris版本,Linux版本
- 1999年:MySQL AB公司,瑞典
- 2003年:MySQL 5.0版本,提供视图、存储过程等功能
- 2008年:Sun 收购
- 2009年:Oracle收购sun
- 2009年:Monty成立MariaDB
MySQL和MariaDB
- 官方网址:
https://www.mysql.com/
http://mariadb.org/ - 官方文档
https://dev.mysql.com/doc/
https://mariadb.com/kb/en/ - 版本演变:
MySQL:5.1 --> 5.5 --> 5.6 --> 5.7 -->8.0
MariaDB:5.5 -->10.0--> 10.1 --> 10.2 --> 10.3
MYSQL的特性
- 插件式存储引擎:也称为“表类型”,存储管理器有多种实现版本,功能和特性可能均略有差别;用户可根据需要灵活选择,Mysql5.5.5开始innoDB引擎是MYSQL默认引擎
MyISAM==> Aria
InnoDB==> XtraDB - 单进程,多线程
- 诸多扩展和新特性
- 提供了较多测试组件
- 开源
2.2 安装MySQL
- Mariadb安装方式:
1、源代码:编译安装
2、二进制格式的程序包:展开至特定路径,并经过简单配置后即可使用
3、程序包管理器管理的程序包
CentOS安装光盘
项目官方:https://downloads.mariadb.org/mariadb/repositories/
注意:
如果不想使用光盘自带的数据库,而是使用相对较新的数据库,可以使用官方提供的yum源进行安装
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
注意:在配置yum源时,要配置本地yum源,以解决依赖关系;安装新版本数据库名称为MariaDB-server
RPM包安装MySQL
- RPM包安装
CentOS7:安装光盘直接提供
mariadb-server 服务器包
mariadb客户端工具包
CentOS6 - 使用yum安装,存在以下问题:
(1)存在匿名用户以及空口令,即任何用户都可以以空口令登录
(2)所有登录用户只能在本地登录,不能远程登录
(3)默认存在test测试数据库,该数据库供新手练习使用,可以删除 - 使用以下脚本,提高数据库安全性
mysql_secure_installation
设置数据库管理员root口令
禁止root远程登录
删除anonymous用户帐号
删除test数据库
脚本运行过程如下:
[root@centos7-1 ~]#mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none): 写入当前mysql数据库root口令,默认没有口令,直接敲enter键
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] y 是否设置root口令
New password: 写入新口令
Re-enter new password: 再次确认口令
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y 是否移除匿名用户
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y 是否禁止root远程登录
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y 是否移除test测试数据库
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y 是否立即下载权限表
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
注意:如果设置有误,可以再次运行脚本进行设置
一旦该脚本运行过以后,想再次以匿名用户或者空口令登录,将不会被允许
MariaDB程序
- 客户端程序:
mysql: 交互式的CLI工具
mysqldump:备份工具,基于mysql协议向mysqld发起查询请求,并将查得的所有数据转换成insert等写操作语句保存文本文件中
mysqladmin:基于mysql协议管理mysqld
mysqlimport:数据导入工具 - MyISAM存储引擎的管理工具:
myisamchk:检查MyISAM库
myisampack:打包MyISAM表,只读 - 服务器端程序
mysqld_safe
mysqld
mysqld_multi:多实例,示例:mysqld_multi--example
mysql默认不支持多实例,要想实现多实例,准备多个mysql安装程序,把配置文件加以修改,使得各自的端口号均不一样,每个实例之间相互独立,互不影响
用户账号
- mysql用户账号由两部分组成:
'USERNAME'@'HOST' - 说明:
HOST限制此用户可通过哪些远程主机连接mysql服务器
支持使用通配符:
% 匹配任意长度的任意字符
172.16.0.0/255.255.0.0 或172.16.%.%
_ 匹配任意单个字符
MySQL客户端
- mysql使用模式:
- 交互式模式:
可运行命令有两类:
客户端命令:
\h, help
\u,use
\s,status
\!,system
服务器端命令:
SQL, 需要语句结束符; - 脚本模式:
mysql –u USERNAME -p PASSWORD < /path/somefile.sql
mysql> source /path/from/somefile.sql
示例:
[root@centos7-1 ~]#cat test.sql
show databases;
[root@centos7-1 ~]#mysql -uroot -pcentos123456 < test.sql
Database
information_schema
mysql
performance_schema
注意:该命令显示结果中的列表与在mysql数据库中执行命令有细微差别,即不带边框
- mysql客户端可用选项:
-A, --no-auto-rehash 禁止补全
-u, --user=用户名,默认为root
-h, --host=服务器主机,默认为localhost
-p, --passowrd=用户密码,建议使用-p,默认为空密码
-P, --port=服务器端口
-S, --socket=指定连接socket文件路径
-D, --database= 指定默认数据库
-C, --compress启用压缩
-e “SQL“执行SQL命令
-V, --version显示版本
-v --verbose显示详细信息
--print-defaults 获取程序默认使用的配置
socket地址
- 服务器监听的两种socket地址:
ipsocket: 监听在tcp的3306端口,支持远程通信
unixsock: 监听在sock文件上,仅支持本机通信
如:/var/lib/mysql/mysql.sock
说明:host为localhost,127.0.0.1时自动使用unixsock
注意:
如果客户端服务器在同一台主机,即使服务端口号没有打开也能连接
[root@centos7-1 ~]#iptables -A INPUT -p tcp --dport 3306 -j REJECT
[root@centos7-1 ~]#mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 31
Server version: 5.5.56-MariaDB MariaDB Server
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
注意:此时mysql -uroot -p 相当于mysql -uroot -p -hlocalhost,即在本机登录。
当客户端和服务器端在同一台主机,客户端登录服务器端并不是通过网络,也没有通过端口号,而是通过/usr/lib/mysql/mysql.socket文件进行连接,socket相当于文件传输中转站,只在本地生效,如果客户端跨网络访问服务端时,则socket文件不生效
如果删除该文件,则客户端无法在本机连接服务端
mysql.socket文件,在服务启动时创建,服务关闭时将不存在;
因此只需重启服务,该文件即可重新生成
执行命令
- 运行mysql命令:默认空密码登录
mysql>use mysql
mysql>select user();查看当前用户
mysql>SELECT User,Host,PasswordFROM user; - 登录系统:mysql –uroot –p
- 客户端命令:本地执行
mysql> help
每个命令都完整形式和简写格式
mysql> status 或\s - 服务端命令:通过mysql协议发往服务器执行并取回结果
每个命令都必须命令结束符号;默认为分号
SELECT VERSION();
知识扩展:更改数据库终端提示符
查看mysqlman帮助: man mysql
搜索prompt,查看提示符修改表格
格式:
在linux中执行:
shell> mysql --prompt="(\u@\h) [\d]> " 这种更改只是临时的,下次登录如果不写就会恢复默认
想要永久保存,需要把更改写入配置文件中
vim /etc/profile.d/env.sh 把变量写入配置文件中
export MYSQL_PS1="(\u@\h) [\d]> " 声明变量
source /etc/profile.d/env.sh 使文件立即生效
或者写入数据库客户端配置文件语句块中
vim /etc/my.cnf.d/mysql-clients.cnf
[mysql]
prompt="\\r:\\m:\\s> "
注意:这两个文件生效的优先级:/etc/my.cnf.d/mysql-clients.cnf文件优先级大于/etc/profile.d/env.sh文件,即数据库客户端配置文件优先生效
另外,在工作中要把生产环境与测试环境的提示符区分开,防止混淆
服务器端配置
- 服务器端(mysqld):工作特性有多种配置方式
- 1、命令行选项:
- 2、配置文件:类ini格式
集中式的配置,能够为mysql的各应用程序提供配置信息
[mysqld] 服务器端配置语句块
[mysqld_safe] 服务端安全性配置语句块
[mysqld_multi] 服务端多实例配置语句块
[mysql] 客户端配置语句块
[mysqldump] 客户端数据库备份语句块
[server] 服务器配置语句块
[client] 客户端配置语句块
格式:parameter = value
说明:_和-相同
1,ON,TRUE意义相同,0,OFF,FALSE意义相同
配置文件
- 配置文件:
文件优先级从上到下,优先级逐渐变高
文件如下:
/etc/my.cnf Global选项
/etc/mysql/my.cnf Global选项
SYSCONFDIR/my.cnf Global选项,即用户指定目录下配置文件
$MYSQL_HOME/my.cnf Server-specific 选项
--defaults-extra-file=path
~/.my.cnf User-specific 选项,即用户家目录下配置文件
一般情况下,写入/etc/my.cnf配置文件中
MariaDB配置
- 侦听3306/tcp端口可以在绑定有一个或全部接口IP上
- vim /etc/my.cnf
[mysqld]
skip-networking=1
关闭网络连接,只侦听本地客户端,所有和服务器的交互都通过一个socket实现,socket的配置存放在/var/lib/mysql/mysql.sock)可在/etc/my.cnf修改
通过二进制格式安装过程
- 二进制格式安装过程(以mariadb-10.2.18版本为例)
(1)准备数据目录
创建逻辑卷,供mysql存放数据使用,因为mysql存放的数据会逐渐增加,使用逻辑卷便于扩展。对硬盘进行分区,创建10G大小的分区(10G为做实验时划分的大小,在实际生产环境中,根据需求进行划分),要注意更改分区标签为8e(lvm类型),分区完毕后同步分区
示例:
创建分区为/dev/sda6
创建逻辑卷:
pvcreate /dev/sda6
vgcreate vg_data /dev/sda6
lvcreate -n lv_mysql -l 100%FREE vg_data
mkfs.xfs /dev/vg_data/lv_mysql
blkid /dev/vg_data/lv_mysql
/dev/vg_data/lv_mysql: UUID="ba3abbaf-b064-40b8-9127-f4f9453133f2" TYPE="xfs"
vim /etc/fstab
UUID=ba3abbaf-b064-40b8-9127-f4f9453133f2 /mysql xfs defaults 0 0 把逻辑卷挂在到/mysql目录下,该目录用于存放数据库数据
mount -a
(2) 创建mysql用户和mysql组
mkdir /mysql/data 手动创建用户家目录
chown mysql.mysql /mysql/data 更改家目录所有者和所属组
useradd -r -s /sbin/nologin -d /mysql/data mysql
注意:在创建用户时,不能指定用户家目录(即-m选项,创建用户家目录),否则数据库安装完毕后,会自动创建以家目录中文件名为命名的数据库
(3) 准备二进制程序
tar xvf mariadb-10.2.18-linux-x86_64.tar.gz -C /usr/local/
注意:这里解压缩的文件路径必须指定为/usr/local目录,因为该文件在编译时就以该目录作为数据库应用程序存放位置。
另外,由于解压后的文件带有版本号,而该文件默认不能有版本号信息,因此,创建软链接指向该文件,而且这样的做法利用灰度发布的思路,有利于版本的切换(只需更改软链接即可)
cd /usr/local/
ln -s mariadb-10.2.18-linux-x86_64/ mysql/
此时,/usr/local/mariadb-10.2.18-linux-x86_64目录下文件所有者和所属组有问题,因此需要更改该目录下所有文件的所有者和所属组
chown -R root:mysql /usr/local/mysql/
(4) 准备配置文件
配置文件可根据系统提供的模板进行修改
配置文件模板所在路径:/usr/local/mysql/support-files/
该目录下有四个模板文件,每个数据库配置文件支持的内存大小不同
my-small.cnf 支持小于等于64M内存
my-medium.cnf 支持32M-64M内存
my-large.cnf 支持512M内存
my-huge.cnf 支持1G-2G内存
根据需求,选择不同的模板文件,在这里我们使用my-huge.cnf模板文件
另外,为了防止与系统自带的数据库配置文件冲突,把配置文件存放到/etc/mysql目录下并命名为my.cnf,因为该目录下配置文件优先级高于系统自带配置文件/etc/my.cnf,该目录需要手动创建
mkdir /etc/mysql/
cd /usr/local/mysql/support-files
cp my-huge.cnf /etc/mysql/my.cnf
更改配置文件:
vim /etc/mysql/my.cnf
[mysqld]
datadir=/mysql/data 指定数据存放路径
innodb_file_per_table=on
skip_name_resolve=on
innodb_file_per_table= on 数据库的每一个表都生成一个独立的文件,便于管理;默认情况下,所有的表存放在一个文件中,这样不利于管理。该文件在10.2以上版本的数据库默认开启此功能,可以不用添加
skip_name_resolve= on 禁止把ip反向解析为名字,因为反向解析会降低数据库的性能,因此建议关闭反向解析
(5)创建数据库文件
cd /usr/local/mysql/
./scripts/mysql_install_db --datadir=/mysql/data --user=mysql
(6)准备服务脚本,并启动服务
服务脚本可以参考系统中提供的模板文件:/usr/local/mysql/support-files/mysql.server
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
把服务脚本复制到系统服务目录下重命名为mysqld,系统启动即可启动该服务
chkconfig --add mysqld 把服务加入服务列表中
service mysqld start 启动服务,由于该服务是二进制编译安装,因此启动服务使用service命令
为了便于使用,把该命令所在路径加入PATH变量
echo PATH=/usr/local/mysqld/bin:$PATH > /etc/profile.d/mysqld.sh
(7)安全初始化
/user/local/mysql/bin/mysql_secure_installation
至此,二进制安装mysql完成
源码编译安装mariadb
具体步骤如下:
1、安装编译依赖的软件包
yum -y install bison bison-develzlib-devel libcurl-devel libarchive-devel boost-develgccgcc-c++ cmakencurses-devel gnutls-devel libxml2-devel openssl-devel libevent-devel libaio-devel
2、做准备用户和数据目录
mkdir/data
useradd -r -s /sbin/nologin -d /data/mysql mysql
tar xvfmariadb-10.2.15.tar.gz
3、cmake编译安装:
cmake的重要特性之一是其独立于源码(out-of-source)的编译功能,即编译工作可以在另一个指定的目录中而非源码目录中进行,这可以保证源码目录不受任何一次编译的影响,因此在同一个源码树上可以进行多次不同的编译,如针对于不同平台编译
编译选项:https://dev.mysql.com/doc/refman/5.7/en/source-configuration-options.html
cd mariadb-10.2.15/
cmake . -DCMAKE_INSTALL_PREFIX=/app/mysql -DMYSQL_DATADIR=/data/mysql/ -DSYSCONFDIR=/etc -DMYSQL_USER=mysql -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITHOUT_MROONGA_STORAGE_ENGINE=1 -DWITH_DEBUG=0 -DWITH_READLINE=1 -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_LIBWRAP=0 -DENABLED_LOCAL_INFILE=1 -DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
提示:如果出错,执行rm-f CMakeCache.txt
4、生成数据库文件
cd/app/mysql/
scripts/mysql_install_db --datadir=/data/mysqldb/ --user=mysql
/5、准备配置文件
cp /app/mysql/support-files/my-huge.cnf/etc/my.cnf
6、准备启动脚本
cp /app/mysql/support-files/mysql.server/etc/init.d/mysqld
7、准备环境变量
echo 'PATH=/app/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
. /etc/profile.d/mysql.sh
8、启动服务
chkconfig--add mysqld;
service mysqld start
实验:实现数据库多实例
-
实现数据库多实例
主要在测试环境中使用,多实例可以使相同版本,也可是使用不同版本 -
实现多实例需要提前准备:
1、用户
2、数据库存放数据的目录
3、数据库配置文件
4、数据库的启动脚本
5、数据库中存放系统数据的数据库文件 -
如果基于同一版本mysql数据库实现多实例:
1、二进制安装程序可使用同一个
2、应用程序可以使用同一个
3、用户账号可以是同一个
4、存放数据库的目录是各自独立的
5、配置文件是独立的,每个数据库的端口可能也不一样
6、服务的启动脚本是独立的,里面监听的端口号也不一样
yum安装mariadb实现多实例:
mysql账号自动生成
[root@centos7 ~]# getent passwd mysql
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
二进制程序默认目录:/usr/libexec/mysqld
规划:
自定义端口号:3306 3307 3308
存放数据库的目录:
/data/mysql/{3306,3307,3308}
以3306为例:
/data/mysql/3306/{etc,log,data,pid,bin}
etc 存放配置文件
log 存放日志文件
data 存放数据库的数据
pid 存放数据库的进程
bin 存放数据库的二进制程序
(1)创建所需的各个目录
mkdir -pv /data/mysql/{3306,3307,3308}/{etc,data,socket,log,bin,pid}
[root@centos7 data]# tree mysql
mysql
├── 3306
│ ├── bin
│ ├── data
│ ├── etc
│ ├── log
│ ├── pid
│ └── socket
├── 3307
│ ├── bin
│ ├── data
│ ├── etc
│ ├── log
│ ├── pid
│ └── socket
└── 3308
├── bin
├── data
├── etc
├── log
├── pid
└── socket
更改mysql目录的所有者和所属组为mysql
chown -R mysql.mysql mysql
(2)准备数据库数据文件:
生成系统数据库文件,使用系统提供的脚本文件:/usr/bin/mysql_install_db
/usr/bin/mysql_install_db --datadir=/data/mysql/3306/data --user=mysql 生成3306端口号的数据库文件,指定存放数据的路径以及用户账号
/usr/bin/mysql_install_db --datadir=/data/mysql/3307/data --user=mysql 生成3307端口号的数据库文件,指定存放数据的路径以及用户账号
/usr/bin/mysql_install_db --datadir=/data/mysql/3308/data --user=mysql 生成3308端口号的数据库文件,指定存放数据的路径以及用户账号
(3)准备配置文件
参考系统生成的数据库配置文件,配置所需的数据库文件
3306端口号数据库配置文件
cp /etc/my.cnf /data/mysql/3306/etc/
vim /data/mysql/3306/etc/my.cnf
[mysqld]
port=3306 指定端口号
datadir=/data/mysql/3306/data 指定存放数据的文件路径
socket=/data/mysql/3306/socket/mysql.sock 指定存放socket文件路径
[mysqld_safe]
log-error=/data/mysql/3306/log/mariadb.log 指定存放日志文件路径
pid-file=/data/mysql/3306/pid/mariadb.pid 指定存放pid文件路径
# !includedir /etc/my.cnf.d 自定义数据量不存在子配置文件,注释掉该行
3307端口号数据库配置文件
cp /etc/my.cnf /data/mysql/3307/etc/
vim /data/mysql/3307/etc/my.cnf
[mysqld]
port=3307 指定端口号
datadir=/data/mysql/3307/data 指定存放数据的文件路径
socket=/data/mysql/3307/socket/mysql.sock 指定存放socket文件路径
[mysqld_safe]
log-error=/data/mysql/3307/log/mariadb.log 指定存放日志文件路径
pid-file=/data/mysql/3307/pid/mariadb.pid 指定存放pid文件路径
# !includedir /etc/my.cnf.d 自定义数据量不存在子配置文件,注释掉该行
3308端口号数据库配置文件
cp /etc/my.cnf /data/mysql/3308/etc/
vim /data/mysql/3308/etc/my.cnf
[mysqld]
port=3308 指定端口号
datadir=/data/mysql/3308/data 指定存放数据的文件路径
socket=/data/mysql/3308/socket/mysql.sock 指定存放socket文件路径
[mysqld_safe]
log-error=/data/mysql/3308/log/mariadb.log 指定存放日志文件路径
pid-file=/data/mysql/3308/pid/mariadb.pid 指定存放pid文件路径
# !includedir /etc/my.cnf.d 自定义数据量不存在子配置文件,注释掉该行
(4)准备mysql服务脚本
可以使用以下脚本实现服务脚本:
vim mysqld
#!/bin/bash
port=3306 自定义端口号,根据需求进行更改
mysql_user="root" 指定以roo身份启动mysql
mysql_pwd="" 指定mysql的root口令
cmd_path="/usr/bin" 指定mysql程序路径,该路径为yum安装默认路径,如果是二进制安装或者源码编译安装数据库,则根据需求进行更改
mysql_basedir="/data/mysql" mysql数据库的根目录,根据需求进行更改
mysql_sock="${mysql_basedir}/${port}/socket/mysql.sock" 调用定义变量,指定数据库socket文件路径
function_start_mysql() 定义函数,启动mysql
{
if [ ! -e "$mysql_sock" ];then
printf "Starting MySQL...\n"
${cmd_path}/mysqld_safe --defaults-file=${mysql_basedir}/${port}/etc/my.cnf &> /dev/null & 使用mysqld_safe命令调用配置文件启动mysql服务
else
printf "MySQL is running...\n"
exit
fi
}
function_stop_mysql() 定义函数,关闭mysql
{
if [ ! -e "$mysql_sock" ];then
printf "MySQL is stopped...\n"
exit
else
printf "Stoping MySQL...\n"
${cmd_path}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_sock} shutdown 使用mysqldadmin命令关闭mysql服务
fi
}
function_restart_mysql() 定义函数,重启mysql
{
printf "Restarting MySQL...\n"
function_stop_mysql
sleep 2
function_start_mysql
}
case $1 in 使用case语句进行条件判断调用哪个函数
start)
function_start_mysql
;;
stop)
function_stop_mysql
;;
restart)
function_restart_mysql
;;
*)
printf "Usage: ${mysql_basedir}/${port}/bin/mysqld {start|stop|restart}\n"
esac
把该脚本复制到各个数据库存放服务脚本的目录下,并把脚本中对应的端口号以及根目录路径进行更改
cp mysqld /data/mysql/3306/bin/
vim /data/mysql/3306/bin/mysqld
port=3306
mysql_basedir="/data/mysql"
cp /data/mysql/3306/bin/mysqld /data/mysql/3307/bin/mysqld
vim /data/mysql/3307/bin/mysqld
port=3307
cp /data/mysql/3306/bin/mysqld /data/mysql/3308/bin/mysqld
vim /data/mysql/3308/bin/mysqld
port=3308
服务开机自启动:
3306,3307,3308三个数据库都需要进行设置,这里以3306数据库为例:
cp /data/mysql/3306/bin/mysqld /etc/init.d/mysqld3306
vim /etc/init.d/mysqld3306
#!/bin/bash
#chkconfig: 345 20 80 添加服务启动和关闭级别
#description: mysql 3307 添加描述
chkconfig --add mysqld3306 把服务加入服务启动列表
注意:每个数据库的服务启动和关闭级别不能一样
或者把服务启动脚本存放到/etc/rc.local目录中
vim /etc/rc.local
/data/mysql/3306/bin/mysqld
/data/mysql/3307/bin/mysqld
/data/mysql/3308/bin/mysqld
对启动脚本增加执行权限
chmod +x /data/mysql/3306/bin/mysqld
chmod +x /data/mysql/3307/bin/mysqld
chmod +x /data/mysql/3308/bin/mysqld
至此,数据库各实例的用户、数据库文件、配置文件、服务启动脚本都已经准备完成
启动服务:
/data/mysql/3306/bin/mysqld start
/data/mysql/3307/bin/mysqld start
/data/mysql/3308/bin/mysqld start
连接数据库:
由于客户端和服务端在同一台主机上,因此可以通过本地socket文件连接数据库
mysql -S /data/mysql/3306/socket/mysql.sock 连接3306数据库
MariaDB [(none)]> show variables like "port"; 查看连接端口号
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port | 3306 |
+---------------+-------+
1 row in set (0.01 sec)
[root@centos7 ~]# mysql -S /data/mysql/3306/socket/mysql.sock -e 'show variables like "port" ' 通过shell命令查看数据库端口号
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port | 3306 |
+---------------+-------+
此时,数据库虽然创建完毕,但是数据库登录时却不需要口令,因此还需要对数据库设置登录口令
mysqladmin -uroot -S /data/mysql/3306/socket/mysql.sock password "centos123456"
通过端口号连接数据库
mysql -uroot -p -P 3306 -h127.0.0.1
[root@centos7 ~]# mysql -uroot -p -P 3306 -h127.0.0.1
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 1
Server version: 5.5.56-MariaDB MariaDB Server
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
注意:在停止服务时,提示需要输入口令
[root@centos7 ~]# /data/mysql/3306/bin/mysqld stop
Stoping MySQL...
Enter password:
这是因为服务脚本中定义的提示服务函数中存在-p${mysql_pwd}选项
function_stop_mysql()
{
if [ ! -e "$mysql_sock" ];then
printf "MySQL is stopped...\n"
exit
else
printf "Stoping MySQL...\n"
${cmd_path}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_sock} shutdown
fi
}
但此时,启动服务脚本中设置的却是空口令
mysql_pwd=""
解决方法:
方法1:删除服务脚本定义函数中${cmd_path}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_sock} shutdown即可
方法2:先给3306端口号数据库添加口令,使用mysqlamdin命令添加口令
mysqladmin -uroot -S /data/mysql/3306/socket/mysql.sock password "centos123456"
然后再启动服务脚本中设置口令项添加设置的口令
mysql_pwd="centos123456"
同样的,3307和3308端口的数据库需要做同样的更改
3307端口号数据库:
设置口令
mysqladmin -uroot -S /data/mysql/3307/socket/mysql.sock password "centos123456"
更改服务脚本设置密码项
mysql_pwd="centos123456"
3308端口号数据库:
设置口令
mysqladmin -uroot -S /data/mysql/3308/socket/mysql.sock password "centos123456"
更改服务脚本设置密码项
mysql_pwd="centos123456"
注意:由于密码在服务脚本中以明文方式显示,因此脚本要做好保密措施。或者服务脚本中不写密码,在关闭服务时会出现输入密码提示,再输入密码即可
注意:mysqld_multi该命令也可以实现多实例,但要求必须是同一个数据库版本
文章评论