目录
一、同一个版本,多个分身实例
方法1 单独配置文件、数据文件 mysqld启动
环境:
centos7.9 最小化安装
mysql 5.7.35
缺陷:
1、启动脚本未通过systemd管理,实例状态信息无法查看
2、my.cnf 中分[mysqld] [mysqld_safe] 等好多选项,是否有必要配置别的选项?
3、目前[mysqld]选项中是否还需要配置其他参数?
##复用的全局文件
yum install -y libaio perl perl-Data-Dumper vim wget
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz &>/dev/null &
tar -xf mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz -C /usr/local/src
ln -s /usr/local/src/mysql-5.7.35-linux-glibc2.12-x86_64 /usr/local/mysql
useradd -r -s /sbin/nologin mysql
mkdir -pv /data/mysql/{3306,3307,3308}/data
chown -R mysql:mysql /data/mysql
echo 'PATH=/usr/local/mysql/bin:$PATH' >/etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
##3306 3307 3308 单独配置文件
cat >/data/mysql/3306/my.cnf <<EOF
[mysqld]
port=3306
user=mysql
datadir=/data/mysql/3306/data
socket=/data/mysql/3306/mysql.sock
pid-file=/data/mysql/3306/mysql.pid
log-error=/data/mysql/3306/mysql.log
#plugin-dir= 参数待定
EOF
##首次安装配置默认字符集
vi /data/mysql/3306/my.cnf #server端
[mysqld]
character-set-server=utf8mb4
vi /etc/my.cnf.d/mysql-clients.cnf #client端
[mysql]
default-character-set=utf8mb4
##初始化数据库,启动数据库
##mysqld_safe是个保护进程,mysqld异常挂掉会自动另起一个
mysqld --defaults-file=/data/mysql/3306/my.cnf --initialize
mysqld_safe --defaults-file=/data/mysql/3306/my.cnf &
##修改数据库密码
#mysqladmin -uroot -p`awk '/A temporary password/{print $NF}' /data/mysql/3306/mysql.log` -S /data/mysql/3306/mysql.sock password magedu
mysqladmin -uroot -p':BxXk=ZrN4F!' -S /data/mysql/3306/mysql.sock password 'magedu'
临时密码来自/data/mysql/3306/mysql.log
##查看数据库
mysql -uroot -pmagedu -S /data/mysql/3306/mysql.sock -e 'show variables like "port";\s;'
##开机启动
vi /etc/rc.d/rc.local
/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/3306/my.cnf &
/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/3307/my.cnf &
/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/3308/my.cnf &
chmod +x /etc/rc.d/rc.local
##关闭数据库
mysqladmin -uroot -pmagedu -S /data/mysql/3306/mysql.sock shutdown
方法2 全局配置文件 单独数据文件 mysqld_multi启动
环境:
centos7.9 最小化安装
mysql 5.7.35
##复用的全局文件
yum install -y libaio perl perl-Data-Dumper vim wget
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz &>/dev/null &
tar -xf mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz -C /usr/local/src
ln -s /usr/local/src/mysql-5.7.35-linux-glibc2.12-x86_64 /usr/local/mysql
useradd -r -s /sbin/nologin mysql
mkdir -pv /data/mysql/{3306,3307,3308}/data
chown -R mysql:mysql /data/mysql
echo 'PATH=/usr/local/mysql/bin:$PATH' >/etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
##3306 3307 3308 在全局配置文件里
[mysqld_multi]
mysqld=/usr/local/mysql/bin/mysqld_safe
mysqladmin=/usr/local/mysql/bin/mysqladmin
user=root
password=mysql
log=/usr/local/mysql/mysqld_multi.log
[mysqld3306]
port=3306
user=mysql
datadir=/data/mysql/3306/data
socket=/data/mysql/3306/mysql.sock
pid-file=/data/mysql/3306/mysql.pid
log-error=/data/mysql/3306/mysql.log
[mysqld3307]
port=3307
user=mysql
datadir=/data/mysql/3307/data
socket=/data/mysql/3307/mysql.sock
pid-file=/data/mysql/3307/mysql.pid
log-error=/data/mysql/3307/mysql.log
[mysqld3308]
port=3308
user=mysql
datadir=/data/mysql/3308/data
socket=/data/mysql/3308/mysql.sock
pid-file=/data/mysql/3308/mysql.pid
log-error=/data/mysql/3308/mysql.log
##首次安装配置默认字符集
vi /data/mysql/3306/my.cnf #server端
[mysqld]
character-set-server=utf8mb4
vi /etc/my.cnf.d/mysql-clients.cnf #client端
[mysql]
default-character-set=utf8mb4
##初始化数据库
mysqld --defaults-file=/data/mysql/3306/my.cnf --initialize
##启动数据库,[mysqld3306]这里只写后面的数字
mysqld_multi start 3306,3307,3308
##修改数据库密码
#mysqladmin -uroot -p`awk '/A temporary password/{print $NF}' /data/mysql/3306/mysql.log` -S /data/mysql/3306/mysql.sock password magedu
mysqladmin -uroot -p':BxXk=ZrN4F!' -S /data/mysql/3306/mysql.sock password 'magedu'
临时密码来自/data/mysql/3306/mysql.log
##查看数据库
mysql -uroot -pmagedu -S /data/mysql/3306/mysql.sock -e 'show variables like "port";\s;'
##开机启动
vi /etc/rc.d/rc.local
#/usr/local/mysql/bin/mysqld_multi start 3306,3307,3308 启不来,待查
/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/3306/my.cnf &
/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/3307/my.cnf &
/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/3308/my.cnf &
chmod +x /etc/rc.d/rc.local
##关闭数据库
mysqld_multi stop 3306
报错“WARNING: my_print_defaults command not found”
#解决方法
#vi /usr/local/mysql/bin/mysqld_multi
#第222行,加 -s
#my $com= join ' ', 'my_print_defaults -s', @defaults_options, $group;
二、 不同版本实例
案例1 二进制安装mariadb 10.4.22基础上 yum安装mariadb 5.5.68
环境:
centos7.9 最小化安装
已安装mariadb 10.4.22版本数据目录/data/mysql
配置文件/etc/my.cnf
[root@centos7 ~]# cat /etc/my.cnf
[mysqld]
datadir=/data/mysql
user=mysql
log-error=/data/mysql/mysqld.log
character-set-server=utf8
socket=/data/mysql/mysql.sock
新增一个mysql实例,来自yum安装
yum install -y mariadb-server
mkdir /data/mysql55
chmod mysql.mysql /data/mysql55
cat >/data/mysql55/my.cnf <<EOF
[mysqld]
datadir=/data/mysql55
user=mysql
log-error=/data/mysql55/mysqld.log
port=13306
socket=/data/mysql55/mysql.sock
EOF
#初始化数据库
/usr/bin/mysql_install_db --datadir=/data/mysql55 --user=msyql
#启动数据库
/usr/bin/mysqld_safe --defaults-file=/data/mysql55/my.cnf &
#开机启动
echo '/usr/bin/mysqld_safe --defaults-file=/data/mysql55/my.cnf &' >> /etc/rc.local
chmod +x /etc/rc.d/rc.local
#进入数据库
/usr/bin/mysql -S /data/mysql55/mysql.sock
三、总结
主要目录文件:
程序目录、数据目录、my.cnf
关键步骤:
1、初始化数据库
初始化命令要对应实例的绝对路径,这样生成的数据文件才是对应版本的
2、启动程序文件
defaults-file 后面要指定对应实例的my.cnf
实例my.cnf文件里明确port datadir log-error socket