
在实际的开发和运维场景中,有时我们需要在同一台服务器上运行多个MySQL数据库实例。本文将详细介绍如何在CentOS系统中安装并配置多个MySQL数据库实例。
首先,确保你的系统已经安装了MySQL。如果没有安装,可以使用以下命令进行安装:
sudo yum update -y
sudo yum install -y mysql-server安装完成后,启动MySQL服务并设置开机自启:
sudo systemctl start mysqld
sudo systemctl enable mysqld为了管理方便,我们为每个MySQL实例创建独立的数据目录和日志目录。假设我们要创建两个实例:mysql1 和 mysql2。
sudo mkdir -p /var/lib/mysql1
sudo mkdir -p /var/lib/mysql2
sudo chown -R mysql:mysql /var/lib/mysql1
sudo chown -R mysql:mysql /var/lib/mysql2使用mysqld命令初始化每个实例的数据目录:
sudo mysqld --initialize-insecure --user=mysql --datadir=/var/lib/mysql1
sudo mysqld --initialize-insecure --user=mysql --datadir=/var/lib/mysql2为每个实例创建独立的配置文件。例如,/etc/my.cnf.d/mysql1.cnf 和 /etc/my.cnf.d/mysql2.cnf。
[mysqld]
datadir=/var/lib/mysql1
socket=/var/lib/mysql1/mysql.sock
port=3306
server-id=1[mysqld]
datadir=/var/lib/mysql2
socket=/var/lib/mysql2/mysql.sock
port=3307
server-id=2为每个实例创建独立的systemd服务文件。例如,/etc/systemd/system/mysqld@.service。
[Unit]
Description=MySQL Server Instance %i
After=network.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/sbin/mysqld --defaults-file=/etc/my.cnf.d/mysql%i.cnf --datadir=/var/lib/mysql%i
Restart=on-failure
PrivateTmp=true
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reloadsudo systemctl start mysqld@1
sudo systemctl start mysqld@2
sudo systemctl enable mysqld@1
sudo systemctl enable mysqld@2可以通过以下命令验证两个实例是否正常运行:
sudo systemctl status mysqld@1
sudo systemctl status mysqld@2还可以通过MySQL客户端连接到这两个实例:
mysql -u root -p -S /var/lib/mysql1/mysql.sock
mysql -u root -p -S /var/lib/mysql2/mysql.sock这对于测试、开发或生产环境中的多租户场景非常有用```在 CentOS 中安装和配置多个 MySQL 数据库实例是一个相对复杂的过程,但通过合理地规划配置文件和端口,可以实现这一目标。以下是一个具体的步骤和示例代码,用于在 CentOS 上安装两个 MySQL 实例(例如:mysqld1 和 mysqld2)。
首先,确保你的系统已经安装了 MySQL。如果没有安装,可以通过以下命令安装:
sudo yum install -y mysql-server为每个 MySQL 实例创建独立的数据目录,并设置正确的权限:
sudo mkdir -p /var/lib/mysql1 /var/lib/mysql2
sudo chown -R mysql:mysql /var/lib/mysql1 /var/lib/mysql2为每个 MySQL 实例创建一个独立的配置文件。假设我们将使用 /etc/my.cnf.d/mysqld1.cnf 和 /etc/my.cnf.d/mysqld2.cnf。
[mysqld1]
datadir=/var/lib/mysql1
socket=/var/lib/mysql1/mysql.sock
port=3306
pid-file=/var/run/mysqld/mysqld1.pid[mysqld2]
datadir=/var/lib/mysql2
socket=/var/lib/mysql2/mysql.sock
port=3307
pid-file=/var/run/mysqld/mysqld2.pid初始化每个 MySQL 实例的数据目录:
sudo mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql1
sudo mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql2为每个 MySQL 实例创建一个系统服务文件。假设我们将使用 /etc/systemd/system/mysqld1.service 和 /etc/systemd/system/mysqld2.service。
[Unit]
Description=MySQL Server Instance 1
After=network.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/sbin/mysqld --defaults-file=/etc/my.cnf.d/mysqld1.cnf
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -SIGTERM $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target[Unit]
Description=MySQL Server Instance 2
After=network.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/sbin/mysqld --defaults-file=/etc/my.cnf.d/mysqld2.cnf
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -SIGTERM $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target启动并启用这两个 MySQL 实例的服务:
sudo systemctl daemon-reload
sudo systemctl start mysqld1
sudo systemctl start mysqld2
sudo systemctl enable mysqld1
sudo systemctl enable mysqld2验证两个 MySQL 实例是否正常运行:
sudo systemctl status mysqld1
sudo systemctl status mysqld2你可以通过以下命令连接到每个实例:
mysql -u root -p -S /var/lib/mysql1/mysql.sock
mysql -u root -p -S /var/lib/mysql2/mysql.sock或者通过端口连接:
mysql -u root -p -h 127.0.0.1 -P 3306
mysql -u root -p -h 127.0.0.1 -P 3307以上步骤和示例代码展示了如何在 CentOS 上安装和配置多个 MySQL 实例。希望这些信息对你有帮助!如果有任何问题,请随时提问。在 CentOS 中安装和配置多个 MySQL 数据库实例可以为不同的应用程序或项目提供独立的数据库环境。以下是一个详细的步骤指南,包括必要的命令和配置文件修改,以帮助你在 CentOS 上设置多个 MySQL 实例。
首先,确保你的系统上已经安装了 MySQL。如果没有,可以通过以下命令安装:
sudo yum update -y
sudo yum install -y mysql-serverMySQL 使用配置文件来定义每个实例的行为。我们将为每个实例创建一个单独的配置文件。假设我们要创建两个实例:mysql1 和 mysql2。
sudo mkdir /etc/mysql
sudo mkdir /etc/mysql/mysql1
sudo mkdir /etc/mysql/mysql2编辑 /etc/mysql/mysql1/my.cnf 文件:
[mysqld]
datadir=/var/lib/mysql1
socket=/var/lib/mysql1/mysql.sock
port=3306
pid-file=/var/run/mysqld/mysqld1.pid
log-error=/var/log/mysql1/error.log编辑 /etc/mysql/mysql2/my.cnf 文件:
[mysqld]
datadir=/var/lib/mysql2
socket=/var/lib/mysql2/mysql.sock
port=3307
pid-file=/var/run/mysqld/mysqld2.pid
log-error=/var/log/mysql2/error.log为每个实例创建数据目录和日志目录,并设置适当的权限:
sudo mkdir -p /var/lib/mysql1
sudo mkdir -p /var/lib/mysql2
sudo mkdir -p /var/log/mysql1
sudo mkdir -p /var/log/mysql2
sudo chown -R mysql:mysql /var/lib/mysql1
sudo chown -R mysql:mysql /var/lib/mysql2
sudo chown -R mysql:mysql /var/log/mysql1
sudo chown -R mysql:mysql /var/log/mysql2使用 mysql_install_db 工具初始化每个实例的数据目录。请注意,从 MySQL 5.7 开始,推荐使用 mysqld --initialize 命令:
sudo mysqld --initialize --user=mysql --basedir=/usr --datadir=/var/lib/mysql1
sudo mysqld --initialize --user=mysql --basedir=/usr --datadir=/var/lib/mysql2为每个实例创建一个启动脚本。这些脚本将用于启动、停止和管理每个实例。
/etc/init.d/mysql1 脚本sudo nano /etc/init.d/mysql1内容如下:
#!/bin/bash
# chkconfig: 345 64 36
# description: MySQL Server 1
. /etc/init.d/functions
MYSQLD=/usr/sbin/mysqld
MYSQLD_OPTS="--defaults-file=/etc/mysql/mysql1/my.cnf"
PIDFILE=/var/run/mysqld/mysqld1.pid
start() {
echo -n "Starting MySQL 1: "
daemon $MYSQLD $MYSQLD_OPTS
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/mysql1
return $RETVAL
}
stop() {
echo -n "Shutting down MySQL 1: "
killproc -p $PIDFILE $MYSQLD
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/mysql1
return $RETVAL
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit $?/etc/init.d/mysql2 脚本sudo nano /etc/init.d/mysql2内容如下:
#!/bin/bash
# chkconfig: 345 65 35
# description: MySQL Server 2
. /etc/init.d/functions
MYSQLD=/usr/sbin/mysqld
MYSQLD_OPTS="--defaults-file=/etc/mysql/mysql2/my.cnf"
PIDFILE=/var/run/mysqld/mysqld2.pid
start() {
echo -n "Starting MySQL 2: "
daemon $MYSQLD $MYSQLD_OPTS
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/mysql2
return $RETVAL
}
stop() {
echo -n "Shutting down MySQL 2: "
killproc -p $PIDFILE $MYSQLD
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/mysql2
return $RETVAL
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit $?使启动脚本可执行:
sudo chmod +x /etc/init.d/mysql1
sudo chmod +x /etc/init.d/mysql2将服务注册到系统启动项:
sudo chkconfig --add mysql1
sudo chkconfig --add mysql2
sudo chkconfig --level 345 mysql1 on
sudo chkconfig --level 345 mysql2 on启动两个 MySQL 实例:
sudo service mysql1 start
sudo service mysql2 start验证每个实例是否正常运行:
sudo netstat -tuln | grep 3306
sudo netstat -tuln | grep 3307你可以使用 mysql 客户端连接到每个实例:
mysql -u root -p -S /var/lib/mysql1/mysql.sock
mysql -u root -p -S /var/lib/mysql2/mysql.sock通过以上步骤,你可以在 CentOS 上成功配置和运行多个 MySQL 实例。每个实例都有自己的配置文件、数据目录和日志目录,互不干扰。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。