一、背景介绍
MariaDB多实例就是在一台机器上开启多个不同的服务端口,运行多个MySQL服务进程,通过不同的socket监听不同的服务端口来提供各自的、互不干涉的服务,各个实例可以根据不同的配置文件设置相互隔离
二、操作步骤
1.安装MariaDB(略)
2.初始化数据库(以3306为例)
/usr/local/MysqL/scripts/MysqL_install_db --basedir=/usr/local/MysqL --datadir=/multidata/3306 --user=MysqL
当有多台MariaDB服务器时server-id不能一样
4.启动服务(以3306为例)
/usr/local/MysqL/bin/MysqLd_safe --defaults-file=/multidata/3306/my.cnf 2>&1 > /dev/null &
如果忘记密码,启动方式为:
/usr/local/MysqL/bin/MysqLd_safe --defaults-file=/multidata/3307/my.cnf --skip-grant-tables 2>&1 > /dev/null &
此时要注意--defaults-file选项要放在--skip-grant-tables之前
5.登陆数据库(以3306为例)
/usr/local/MysqL/bin/MysqL -S /multidata/3306/MysqL.sock
如果忘记密码,skip启动后以空密码登陆:
MysqL -uroot -p -S /multidata/3307/MysqL.sock
6.设置数据库root账户密码(以3306为例)
/usr/local/MysqL/bin/MysqLadmin -uroot password '123456' -S /multidata/3306/MysqL.sock
如果是修改密码,命令为:
/usr/local/MysqL/bin/MysqLadmin -uroot -p123456 password 'new' -S /multidata/3306/MysqL.sock
7.关闭服务(以3306为例)
MysqLadmin -uroot -p123456 -S /multidata/3306/MysqL.sock shutdown
三、编写启动脚本
为方便使用时启动和关闭,可以自己编写一个脚本并给与执行权限取代原有的MysqLd执行文件,脚本内容如下:
#!/bin/bash
. /etc/init.d/functions
PORT=$2
USER=root
PASSWD=123456
MysqLBIN='/usr/local/MysqL/bin'
SOCKETFILE="/multidata/${PORT}/MysqL.sock"
PIDFILE="/multidata/${PORT}/MysqL.pid"
MYCNF="/multidata/${PORT}/my.cnf"
[[ $# -eq 2 ]] || {
echo "Usage: $0 {start|stop|restart|reload} {PORT}"
exit 1
}
MysqL_start() {
[[ -e "$SOCKETFILE" ]] && {
action "MysqL port: $PORT IS already running" /bin/false
exit 0
} || {
action "Starting MysqL... please wait" /bin/true
$MysqLBIN/MysqLd_safe --defaults-file=$MYCNF &> /dev/null &
}
[[ "$?" == "0" ]] && {
action "MysqL has been Started" /bin/true
} || {
action "MysqL Started" /bin/false
}
}
MysqL_stop() {
[[ ! -e "$SOCKETFILE" ]] && {
action "MysqL port:$PORT was already down" /bin/false
} || {
$MysqLBIN/MysqLadmin -u $USER -p$PASSWD -S $SOCKETFILE shutdown &>/dev/null
}
[[ "$?" == 0 ]] && {
action "MysqL port:$PORT has been Stopped" /bin/true
}
}
case "$1" in
'start')
MysqL_start
;;
'stop')
MysqL_stop
;;
'restart'|'reload')
MysqL_stop
sleep 3
MysqL_start
;;
*)
echo "Usage: $0 {start|stop|restart|reload} {PORT}"
esac
注意:该脚本中带数据库root账户的密码(2台服务器密码一样),所以在生产环境中建议将权限改为700以减小安全隐患
在生产环境中建议将多个实例的配置文件分开,这样忘记密码时候便于指定配置文件通过skip-grant-tables选项找回。作为多实例的另一种方法,也可以使用同一个配置文件集中管理,以下在之前基础上创建3308,3309实例进行说明,步骤如下:
1.创建3308,3309的数据目录
mkdir -pv /unidata/{3308,3309}
cp MysqLd_multi.server /etc/init.d/MysqLd
cp my-huge.cnf /etc/my.cnf
2.初始化数据(以3308为例)
/usr/local/MysqL/scripts/MysqL_install_db --basedir=/usr/local/MysqL --datadir=/unidata/3308 --user=MysqL
[MysqLd_multi]
MysqLd=/usr/local/MysqL/bin/MysqLd_safe
MysqLadmin=/usr/local/MysqL/bin/MysqLadmin
log = /unidata/MysqL_multi.log
user = root
#password =
如果该地方不是root用户,下面则需要在数据库为该用户添加shutdown权限,否则MysqLd_multi将无法关闭实例
[MysqLd3308]
socket=/unidata/3308/MysqL.sock
port=3308
server-id=1
pid-file=/unidata/3308/MysqL.pid
datadir=/unidata/3308
user=MysqL #必须要指定1个用户,否则实例无法启动
[MysqLd3309]
socket=/unidata/3309/MysqL.sock
port=3309
server-id=2
pid-file=/unidata/3309/MysqL.pid
datadir=/unidata/3309
user=MysqL
注意:多个实例除了MysqLd号不同外,每个实例内的pid、port、socket和server-id也不能相同
4.检测服务能否正常启动和关闭
cp /usr/local/MysqL/bin/MysqLd_multi /etc/init.d/MysqLd_multi
/etc/init.d/MysqLd_multi start 3308,3309
/etc/init.d/MysqLd_multi report
/etc/init.d/MysqLd_multi stop 3308,3309
补充说明2:查看数据库字符集
MariaDB在编译安装时可以指定默认字符集,查看数据库字符集命令:
show create database MysqL \G
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。