欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

MySQL多实例安装教程

程序员文章站 2022-03-08 14:46:57
MySQL的多实例 [toc] 实验准备: 准备阶段: 1. 准备文件目录 2. 更改所有者所属组 实验阶段 1. 分别创建数据库并确认数据库文件都生成了,再查看所有者所属组是否正确。 2. 准备配置文件 3. 设置服务启动脚本(只有多实例安装需要自己手写脚本其他安装都是自动生成的) 4. 试启动3 ......

mysql的多实例

实验准备:

1. 一个干净的centos7系统
2. 关闭防火墙和selinux
3. 之前已经二进制安装过的mysql数据库
4. 准备文件夹

准备阶段:

  1. 准备文件目录
[root@centos7 data]#mkdir -pv /mysql/{3306,3307,3308}/{data,etc,socket,log,bin,pid}
mkdir: created directory ‘/mysql’
mkdir: created directory ‘/mysql/3306’
mkdir: created directory ‘/mysql/3306/data’
mkdir: created directory ‘/mysql/3306/etc’
mkdir: created directory ‘/mysql/3306/socket’
mkdir: created directory ‘/mysql/3306/log’
mkdir: created directory ‘/mysql/3306/bin’
mkdir: created directory ‘/mysql/3306/pid’
mkdir: created directory ‘/mysql/3307’
mkdir: created directory ‘/mysql/3307/data’
mkdir: created directory ‘/mysql/3307/etc’
mkdir: created directory ‘/mysql/3307/socket’
mkdir: created directory ‘/mysql/3307/log’
mkdir: created directory ‘/mysql/3307/bin’
mkdir: created directory ‘/mysql/3307/pid’
mkdir: created directory ‘/mysql/3308’
mkdir: created directory ‘/mysql/3308/data’
mkdir: created directory ‘/mysql/3308/etc’
mkdir: created directory ‘/mysql/3308/socket’
mkdir: created directory ‘/mysql/3308/log’
mkdir: created directory ‘/mysql/3308/bin’
mkdir: created directory ‘/mysql/3308/pid’

(生成之后的效果)
[root@centos7 data]#tree /data
/data
├── mariadb-10.2.29-linux-x86_64.tar.gz
├── mariadb-install.sh
├── my.cnf
└── mysql
    ├── aria_log.00000001
    ├── aria_log_control
    ├── centos7.localdomain.pid
    ├── ib_buffer_pool
    ├── ibdata1
    ├── ib_logfile0
    ├── ib_logfile1
    ├── ibtmp1
    ├── multi-master.info
    ├── mysql
    │   ├── columns_priv.frm
    │   ├── columns_priv.myd
    │   ├── columns_priv.myi
    │   ├── column_stats.frm
    │   ├── column_stats.myd
    │   ├── column_stats.myi
    │   ├── db.frm
    │   ├── db.myd
    │   ├── db.myi
    │   ├── db.opt
    │   ├── event.frm
    │   ├── event.myd
    │   ├── event.myi
    │   ├── func.frm
    │   ├── func.myd
    │   ├── func.myi
    │   ├── general_log.csm
    │   ├── general_log.csv
    │   ├── general_log.frm
    │   ├── gtid_slave_pos.frm
    │   ├── gtid_slave_pos.ibd
    │   ├── help_category.frm
    │   ├── help_category.myd
    │   ├── help_category.myi
    │   ├── help_keyword.frm
    │   ├── help_keyword.myd
    │   ├── help_keyword.myi
    │   ├── help_relation.frm
    │   ├── help_relation.myd
    │   ├── help_relation.myi
    │   ├── help_topic.frm
    │   ├── help_topic.myd
    │   ├── help_topic.myi
    │   ├── host.frm
    │   ├── host.myd
    │   ├── host.myi
    │   ├── index_stats.frm
    │   ├── index_stats.myd
    │   ├── index_stats.myi
    │   ├── innodb_index_stats.frm
    │   ├── innodb_index_stats.ibd
    │   ├── innodb_table_stats.frm
    │   ├── innodb_table_stats.ibd
    │   ├── plugin.frm
    │   ├── plugin.myd
    │   ├── plugin.myi
    │   ├── proc.frm
    │   ├── proc.myd
    │   ├── proc.myi
    │   ├── procs_priv.frm
    │   ├── procs_priv.myd
    │   ├── procs_priv.myi
    │   ├── proxies_priv.frm
    │   ├── proxies_priv.myd
    │   ├── proxies_priv.myi
    │   ├── roles_mapping.frm
    │   ├── roles_mapping.myd
    │   ├── roles_mapping.myi
    │   ├── servers.frm
    │   ├── servers.myd
    │   ├── servers.myi
    │   ├── slow_log.csm
    │   ├── slow_log.csv
    │   ├── slow_log.frm
    │   ├── tables_priv.frm
    │   ├── tables_priv.myd
    │   ├── tables_priv.myi
    │   ├── table_stats.frm
    │   ├── table_stats.myd
    │   ├── table_stats.myi
    │   ├── time_zone.frm
    │   ├── time_zone_leap_second.frm
    │   ├── time_zone_leap_second.myd
    │   ├── time_zone_leap_second.myi
    │   ├── time_zone.myd
    │   ├── time_zone.myi
    │   ├── time_zone_name.frm
    │   ├── time_zone_name.myd
    │   ├── time_zone_name.myi
    │   ├── time_zone_transition.frm
    │   ├── time_zone_transition.myd
    │   ├── time_zone_transition.myi
    │   ├── time_zone_transition_type.frm
    │   ├── time_zone_transition_type.myd
    │   ├── time_zone_transition_type.myi
    │   ├── user.frm
    │   ├── user.myd
    │   └── user.myi
    ├── performance_schema
    │   └── db.opt
    ├── tc.log
    └── test
        └── db.opt

4 directories, 103 files
  1. 更改所有者所属组
[root@centos7 data]#id mysql  (因为之前已经安装过mysql数据库所以有这个用户)
uid=987(mysql) gid=981(mysql) groups=981(mysql)

[root@centos7 data]#chown -r mysql.mysql /mysql/
[root@centos7 data]#ll mysql/
total 122936
-rw-rw---- 1 mysql mysql    16384 nov 19 18:06 aria_log.00000001
-rw-rw---- 1 mysql mysql       52 nov 19 18:06 aria_log_control
-rw-rw---- 1 mysql mysql        5 nov 19 18:06 centos7.localdomain.pid
-rw-rw---- 1 mysql mysql      938 nov 19 18:06 ib_buffer_pool
-rw-rw---- 1 mysql mysql 12582912 nov 19 18:06 ibdata1
-rw-rw---- 1 mysql mysql 50331648 nov 19 18:06 ib_logfile0
-rw-rw---- 1 mysql mysql 50331648 nov 19 18:06 ib_logfile1
-rw-rw---- 1 mysql mysql 12582912 nov 19 18:06 ibtmp1
-rw-rw---- 1 mysql mysql        0 nov 19 18:06 multi-master.info
drwx------ 2 mysql mysql     4096 nov 19 18:06 mysql
drwx------ 2 mysql mysql       20 nov 19 18:06 performance_schema
-rw-rw---- 1 mysql mysql    24576 nov 19 18:06 tc.log
drwx------ 2 mysql mysql       20 nov 19 18:06 test

实验阶段

  1. 分别创建数据库并确认数据库文件都生成了,再查看所有者所属组是否正确。
143  /usr/local/mysql/scripts/mysql_install_db --datadir=/mysql/3306/data --user=mysql
144  /usr/local/mysql/scripts/mysql_install_db --datadir=/mysql/3307/data --user=mysql
145  /usr/local/mysql/scripts/mysql_install_db --datadir=/mysql/3308/data --user=mysql

[root@centos7 data]#ll /mysql/3307
total 0
drwxr-xr-x 2 mysql mysql   6 nov 19 18:25 bin
drwxr-xr-x 5 mysql mysql 181 nov 19 18:39 data
drwxr-xr-x 2 mysql mysql   6 nov 19 18:25 etc
drwxr-xr-x 2 mysql mysql   6 nov 19 18:25 log
drwxr-xr-x 2 mysql mysql   6 nov 19 18:25 pid
drwxr-xr-x 2 mysql mysql   6 nov 19 18:25 socket
[root@centos7 data]#ll /mysql/3308
total 0
drwxr-xr-x 2 mysql mysql   6 nov 19 18:25 bin
drwxr-xr-x 5 mysql mysql 181 nov 19 18:39 data
drwxr-xr-x 2 mysql mysql   6 nov 19 18:25 etc
drwxr-xr-x 2 mysql mysql   6 nov 19 18:25 log
drwxr-xr-x 2 mysql mysql   6 nov 19 18:25 pid
drwxr-xr-x 2 mysql mysql   6 nov 19 18:25 socket
[root@centos7 data]#ll /mysql/3306
total 0
drwxr-xr-x 2 mysql mysql   6 nov 19 18:25 bin
drwxr-xr-x 5 mysql mysql 181 nov 19 18:39 data
drwxr-xr-x 2 mysql mysql   6 nov 19 18:25 etc
drwxr-xr-x 2 mysql mysql   6 nov 19 18:25 log
drwxr-xr-x 2 mysql mysql   6 nov 19 18:25 pid
drwxr-xr-x 2 mysql mysql   6 nov 19 18:25 socket
[root@centos7 data]#ll /mysql/3306/data/
total 110620
-rw-rw---- 1 mysql mysql    16384 nov 19 18:39 aria_log.00000001
-rw-rw---- 1 mysql mysql       52 nov 19 18:39 aria_log_control
-rw-rw---- 1 mysql mysql      938 nov 19 18:39 ib_buffer_pool
-rw-rw---- 1 mysql mysql 12582912 nov 19 18:39 ibdata1
-rw-rw---- 1 mysql mysql 50331648 nov 19 18:39 ib_logfile0
-rw-rw---- 1 mysql mysql 50331648 nov 19 18:39 ib_logfile1
drwx------ 2 mysql mysql     4096 nov 19 18:39 mysql
drwx------ 2 mysql mysql       20 nov 19 18:39 performance_schema
drwx------ 2 mysql mysql       20 nov 19 18:39 test
  1. 准备配置文件
[root@centos7 data]#cp /etc/my.cnf /mysql/3306/etc/
[root@centos7 data]#vim /mysql/3306/etc/my.cnf   (根据自己规划的路径更改)
[mysqld]
port=3306
socket=/mysql/3306/socket/mysqld.sock
datadir=/mysql/3306/data
innodb_file_per_table=1

[mysqld_safe]
log-error=/mysql/3306/log/mysqld.log
pid-file=/mysql/3306/pid/mysqld.pid
~            
(准备另外两个数据库的配置文件)
[root@centos7 data]#cp /mysql/3306/etc/my.cnf /mysql/3307/etc/
[root@centos7 data]#cp /mysql/3306/etc/my.cnf /mysql/3308/etc/
(使用sed替换)
[root@centos7 data]#sed -i 's/3306/3307/' /mysql/3307/etc/my.cnf
[root@centos7 data]#sed -i 's/3306/3308/' /mysql/3308/etc/my.cnf
(确认已经替换掉)
[root@centos7 data]#cat /mysql/3308/etc/my.cnf
[mysqld]
port=3308
socket=/mysql/3308/socket/mysqld.sock
datadir=/mysql/3308/data
innodb_file_per_table=1

[mysqld_safe]
log-error=/mysql/3308/log/mysqld.log
pid-file=/mysql/3308/pid/mysqld.pid
[root@centos7 data]#cat /mysql/3307/etc/my.cnf
[mysqld]
port=3307
socket=/mysql/3307/socket/mysqld.sock
datadir=/mysql/3307/data
innodb_file_per_table=1

[mysqld_safe]
log-error=/mysql/3307/log/mysqld.log
pid-file=/mysql/3307/pid/mysqld.pid
  1. 设置服务启动脚本(只有多实例安装需要自己手写脚本其他安装都是自动生成的)
[root@centos7 data]#cd /mysql/3306/bin/
[root@centos7 bin]#ls

[root@centos7 bin]#vim mysqld

#!/bin/bash
port=3306
mysql_user="root"
mysql_pwd=""    (这个就为空就行)
cmd_path="/usr/local/mysql/bin"   (这个路径按你自己的配置更改)
mysql_basedir="/mysql"
mysql_sock="${mysql_basedir}/${port}/socket/mysqld.sock"  (这个之前改过名就在mysql后面加了个d)

function_start_mysql()
{
    if [ ! -e "$mysql_sock" ];then
      printf "starting mysql...\n"
      ${cmd_path}/mysqld_safe --defaults-file=${mysql_basedir}/${port}/etc/my.cnf  &> /dev/null  &
    else
      printf "mysql is running...\n"
      exit
    fi
}


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
}


function_restart_mysql()
{
    printf "restarting mysql...\n"
    function_stop_mysql
    sleep 2
    function_start_mysql
}


case $1 in
start)
    function_start_mysql
;;
stop)
    function_stop_mysql
;;
restart)
    function_restart_mysql
;;
*)
    printf "usage: ${mysql_basedir}/${port}/bin/mysqld {start|stop|restart}\n"
esac
[root@centos7 bin]#chmod +x mysqld    (加上执行权限)
[root@centos7 bin]#pwd
/mysql/3306/bin
(在这一步的时候可以先试启动一下如果没问题就把剩下两个启动脚本一起设置好)
  1. 试启动3306端口的数据库
[root@centos7 bin]#ss -ntl   (确定3306端口没有占用,这里是因为我之前二进制安装的数据库占用了关掉就好了)
state       recv-q send-q   local address:port                  peer address:port              
listen      0      128                  *:111                              *:*                  
listen      0      128                  *:6000                             *:*                  
listen      0      5        192.168.122.1:53                               *:*                  
listen      0      128                  *:22                               *:*                  
listen      0      128          127.0.0.1:631                              *:*                  
listen      0      100          127.0.0.1:25                               *:*                  
listen      0      128          127.0.0.1:6010                             *:*                  
listen      0      128          127.0.0.1:6011                             *:*                  
listen      0      80                  :::3306     (这里端口还开着)       :::*                  
listen      0      128                 :::111                             :::*                  
listen      0      128                 :::6000                            :::*                  
listen      0      128                 :::22                              :::*                  
listen      0      128                ::1:631                             :::*                  
listen      0      100                ::1:25                              :::*                  
listen      0      128                ::1:6010                            :::*                  
listen      0      128                ::1:6011                            :::*           
[root@centos7 bin]#service mysqld stop   (关闭数据库)
stopping mysqld (via systemctl):                           [  ok  ]
[root@centos7 bin]#ss -ntl
state       recv-q send-q   local address:port                  peer address:port              
listen      0      128                  *:111                              *:*                  
listen      0      128                  *:6000                             *:*                  
listen      0      5        192.168.122.1:53                               *:*                  
listen      0      128                  *:22                               *:*                  
listen      0      128          127.0.0.1:631                              *:*                  
listen      0      100          127.0.0.1:25                               *:*                  
listen      0      128          127.0.0.1:6010                             *:*                  
listen      0      128          127.0.0.1:6011                             *:*                  
listen      0      128                 :::111                             :::*                  
listen      0      128                 :::6000                            :::*                  
listen      0      128                 :::22                              :::*                  
listen      0      128                ::1:631                             :::*                  
listen      0      100                ::1:25                              :::*                  
listen      0      128                ::1:6010                            :::*                  
listen      0      128                ::1:6011                            :::*                  

[root@centos7 bin]#./mysqld    (以为是自己写的启动脚本支持基本的三个参数)
usage: /mysql/3306/bin/mysqld {start|stop|restart}
[root@centos7 bin]#./mysqld start
starting mysql...
[root@centos7 bin]#ss -ntl
state       recv-q send-q   local address:port                  peer address:port              
listen      0      128                  *:111                              *:*                  
listen      0      128                  *:6000                             *:*                  
listen      0      5        192.168.122.1:53                               *:*                  
listen      0      128                  *:22                               *:*                  
listen      0      128          127.0.0.1:631                              *:*                  
listen      0      100          127.0.0.1:25                               *:*                  
listen      0      128          127.0.0.1:6010                             *:*                  
listen      0      128          127.0.0.1:6011                             *:*                  
listen      0      80                  :::3306   (启动成功)              :::*                  
listen      0      128                 :::111                             :::*                  
listen      0      128                 :::6000                            :::*                  
listen      0      128                 :::22                              :::*                  
listen      0      128                ::1:631                             :::*                  
listen      0      100                ::1:25                              :::*                  
listen      0      128                ::1:6010                            :::*                  
listen      0      128                ::1:6011                            :::*             

[root@centos7 bin]#mysql -s /mysql/3306/socket/mysqld.sock   (这里要登陆的话可以指定socket文件路径进行登录)
welcome to the mariadb monitor.  commands end with ; or \g.
your mariadb connection id is 8
server version: 10.2.29-mariadb mariadb server

copyright (c) 2000, 2018, oracle, mariadb corporation ab and others.

type 'help;' or '\h' for help. type '\c' to clear the current input statement.

mariadb [(none)]> show databases;   (查看数据库)
+--------------------+
| database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

mariadb [(none)]> create database db3306;  (建立一个数据库)
query ok, 1 row affected (0.00 sec)

mariadb [(none)]> quit
bye
[root@centos7 bin]#cd ..
[root@centos7 3306]#ls
bin  data  etc  log  pid  socket
[root@centos7 3306]#ls data/
aria_log.00000001  ib_buffer_pool  ib_logfile1        mysql               test
aria_log_control   ibdata1         ibtmp1             performance_schema
db3306             ib_logfile0     multi-master.info  tc.log
(建立的数据库就是生成一个新的文件夹)

(到这里说明已经成功了,可以把之前没做完的3307,3308做完)
  1. 继续设置另外两个启动脚本
[root@centos7 3306]#cp bin/mysqld /mysql/3307/bin/
[root@centos7 3306]#cp bin/mysqld /mysql/3308/bin/  (把脚本拷贝过去)

[root@centos7 3306]#sed -i 's/3306/3307/' /mysql/3307/bin/mysqld  (sed替换)
[root@centos7 3306]#sed -i 's/3306/3308/' /mysql/3308/bin/mysqld 
[root@centos7 3306]#cat /mysql/3307/bin/mysqld   (确认替换掉了)
#!/bin/bash
port=3307
.
.
.
.
[root@centos7 3306]#cat /mysql/3308/bin/mysqld
#!/bin/bash
port=3308
.
.
.
.
  1. 启动所有脚本
[root@centos7 3306]#/mysql/3307/bin/mysqld start (3306也可以这样启动)
starting mysql...
[root@centos7 3306]#/mysql/3308/bin/mysqld start
starting mysql...
[root@centos7 3306]#ss -ntl
state       recv-q send-q   local address:port                  peer address:port              
listen      0      128                  *:111                              *:*                  
listen      0      128                  *:6000                             *:*                  
listen      0      5        192.168.122.1:53                               *:*                  
listen      0      128                  *:22                               *:*                  
listen      0      128          127.0.0.1:631                              *:*                  
listen      0      100          127.0.0.1:25                               *:*                  
listen      0      128          127.0.0.1:6010                             *:*                  
listen      0      128          127.0.0.1:6011                             *:*                  
listen      0      80                  :::3306                            :::*                  
listen      0      80                  :::3307   (成功)                   :::*                  
listen      0      80                  :::3308                            :::*                  
listen      0      128                 :::111                             :::*                  
listen      0      128                 :::6000                            :::*                  
listen      0      128                 :::22                              :::*                  
listen      0      128                ::1:631                             :::*                  
listen      0      100                ::1:25                              :::*                  
listen      0      128                ::1:6010                            :::*                  
listen      0      128                ::1:6011                            :::*                  
(记得添加一下path变量要不使用命令工具很麻烦)
[root@centos7 mysql]#echo 'path=/usr/local/mysql/bin:$path' > /etc/profile.d/mysql.sh
[root@centos7 mysql]#. /etc/profile.d/mysql.sh