单实例
一台linux中,一个mysql,一个进程,一个端口
多实例
一台linux中,多个mysql,多个进程,多个端口
#实例1 /usr/local/mysql/3306/my.cnf /usr/local/mysql/3306/mysqld /usr/local/mysql/3306/data #实例2 /usr/local/mysql/3307/my.cnf /usr/local/mysql/3307/mysqld /usr/local/mysql/3307/data
基于一个mysql应用
然后初始化三次,生成三个独立的mysql数据目录,即为三个实例
让你安装一个MySQL
二进制方式安装MySQL
#二进制安装 wget https://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.50-linux-glibc2.12-x86_64.tar.gz #安装依赖 yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake #清除之前的环境 #清除mysq客户端的环境变量 #卸载之前的mysql以及停用mysql端口 [root@localhost ~]# vim /etc/profile [root@localhost ~]# source /etc/profile [root@localhost ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin [root@localhost ~]# #创建用户 useradd -M -s /sbin/nologin mysql id mysql #准备好多实例mysql的安装目录 [root@localhost ~]# mkdir -p /my_mysql/{3306,3307} [root@localhost ~]# tree /my_mysql/ bash: tree: 未找到命令... [root@localhost ~]# yum -y install tree [root@localhost ~]# tree /my_mysql/ /my_mysql/ ├── 3306 └── 3307 2 directories, 0 files [root@localhost ~]# #解压二进制文件 [root@localhost home]# tar -zxvf mysql-5.6.50-linux-glibc2.12-x86_64.tar.gz -C /application/ #二进制安装目录,已经编译好的,有bin目录的 [root@localhost home]# ls -l /application/ 总用量 0 drwxr-xr-x. 13 root root 191 8月 21 11:06 mysql-5.6.50-linux-glibc2.12-x86_64
3306的实例的my.cnf
#这是配置客户端的,可以先不配置 [client] #下面是配置服务端的,需要配置 [mysqld] #使用的用户名启动 user=mysql #默认的端口号码 port=3306 #指定进程套接字文件 socket=/my_mysql/3306/mysql.sock #二进制安装的目录 basedir=/application/mysql-5.6.50-linux-glibc2.12-x86_64/ #数据存储文件 datadir=/my_mysql/3306/data/ log-bin=/my_mysql/3306/mysql-bin #唯一标识,给主从使用 server-id=1 [mysqld_safe] #日志错误日志 log-error=/my_mysql/3306/mysql_3306_error.log #进程id号 pid-file=/my_mysql/3306/mysqld_3306.pid
准备下面的实例配置可以用sed进行修改
#修改306变成3307 [root@localhost 3306]# sed 's/3306/3307/g' my.cnf >> /my_mysql/3307/my.cnf [root@localhost 3306]# tree ../ ../ ├── 3306 │ └── my.cnf └── 3307 └── my.cnf #修改server-id [root@localhost 3306]# sed -i 's/^server.*/server-id=2/g' /my_mysql/3307/my.cnf
3307的实例的my.cnf
注意修改如下参数
第一个是,所有的3306换成3307
service-id一定不能和3306的实例重复
#这是配置客户端的,可以先不配置 [client] #下面是配置服务端的,需要配置 [mysqld] #使用的用户名启动 user=mysql #默认的端口号码 port=3307 #指定进程套接字文件 socket=/my_mysql/3307/mysql.sock #二进制安装的目录 basedir=/application/mysql-5.6.50-linux-glibc2.12-x86_64/ #数据存储文件 datadir=/my_mysql/3307/data/ log-bin=/my_mysql/3307/mysql-bin #唯一标识,给主从使用 server-id=2 [mysqld_safe] #日志错误日志 log-error=/my_mysql/3307/mysql_3307_error.log #进程id号 pid-file=/my_mysql/3307/mysqld_3307.pid
#!/bin/bash port=3306 mysql_user="mysql" Cmdpath="/application/mysql-5.6.50-linux-glibc2.12-x86_64/bin" mysql_sock="/my_mysql/${port}/mysql.sock" mysqld_pid_file_path=/my_mysql/${port}/mysqld_${port}.pid start (){ if [ ! -e "$mysql_sock" ];then printf "Starting Mysql....\n" /bin/sh ${Cmdpath}/mysqld_safe --default-file=/my_mysql/${port}/my.cnf --pid-file=$mysqld_pid_file_path 2>&1 > /dev/null & sleep 3 else printf "MySQL is running...\n" exit 1z fi } stop(){ if [ ! -e "$mysql_sock" ] ;then printf "MySQL is stopped...\n" exit 1 else prinitf "Stoping MySQL...\n" mysqld_pid=`cat "$mysqld_pid_file_path"` if(kill -0 $mysqld_pid 2>/dev/null) then kill $mysqld_pid sleep 2 fi fi } restart(){ printf "Restarting MySQL...\n" stop sleep 2 start } case "$1" in start) start ;; stop) stop ;; restart) restart ;; *) printf "Usage: /my_mysql/${port}/mysql{start|stop|restart}\n" esac
赋予权限
[root@localhost 3307]# chmod +x mysql_3307 [root@localhost 3307]# ls -l 总用量 8 -rw-r--r--. 1 root root 585 8月 21 12:15 my.cnf -rwxr-xr-x. 1 root root 916 8月 21 12:40 mysql_3307 [root@localhost 3307]# chmod +x ../3306/mysql_3306 [root@localhost 3307]#
需要更改port就行
同时也要赋予权限
#!/bin/bash port=3307 mysql_user="root" Cmdpath="/application/mysql-5.6.50-linux-glibc2.12-x86_64/bin" mysql_sock="/my_mysql/${port}/mysql.sock" mysqld_pid_file_path=/my_mysql/${port}/mysqld_${port}.pid start (){ if [ ! -e "$mysql_sock" ];then printf "Starting Mysql....\n" /bin/sh ${Cmdpath}/mysqld_safe --default-file=/my_mysql/${port}/my.cnf --pid-file=$mysqld_pid_file_path 2>&1 > /dev/null & sleep 3 else printf "MySQL is running...\n" exit 1z fi } stop(){ if [ ! -e "$mysql_sock" ] ;then printf "MySQL is stopped...\n" exit 1 else prinitf "Stoping MySQL...\n" mysqld_pid=`cat "$mysqld_pid_file_path"` if(kill -0 $mysqld_pid 2>/dev/null) then kill $mysqld_pid sleep 2 fi fi } restart(){ printf "Restarting MySQL...\n" stop sleep 2 start } case "$1" in start) start ;; stop) stop ;; restart) restart ;; *) printf "Usage: /my_mysql/${port}/mysql{start|stop|restart}\n" esac
赋予执行权限
降低权限,赋予mysql权限
[root@localhost ~]# chown -R mysql.mysql /my_mysql/ [root@localhost ~]# ls -l /my_mysql/3306/ 总用量 8 -rw-r--r--. 1 mysql mysql 585 8月 21 12:14 my.cnf -rwxr-xr-x. 1 mysql mysql 916 8月 21 12:38 mysql_3306 [root@localhost ~]# ls -l /my_mysql/ 总用量 0 drwxr-xr-x. 2 mysql mysql 38 8月 21 12:38 3306 drwxr-xr-x. 2 mysql mysql 38 8月 21 12:40 3307 [root@localhost ~]#
[root@localhost ~]# vim /etc/profile [root@localhost ~]# tail -1 /etc/profile export PATH=$PATH:/application/mysql-5.6.50-linux-glibc2.12-x86_64/bin/ [root@localhost ~]# source /etc/profile [root@localhost ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/application/mysql-5.6.50-linux-glibc2.12-x86_64/bin/ [root@localhost ~]#
分别创建3306和3307的数据目录
[root@localhost ~]# mkdir /my_mysql/3307/data [root@localhost ~]# mkdir /my_mysql/3306/data [root@localhost ~]# tree /my_mysql/ /my_mysql/ ├── 3306 │ ├── data │ ├── my.cnf │ └── mysql_3306 └── 3307 ├── data ├── my.cnf └── mysql_3307 4 directories, 4 files [root@localhost ~]#
创建之后需要重新赋予权限
[root@localhost ~]# ls -l /my_mysql/3306/ 总用量 8 drwxr-xr-x. 2 root root 6 8月 21 13:53 data -rw-r--r--. 1 mysql mysql 585 8月 21 12:14 my.cnf -rwxr-xr-x. 1 mysql mysql 916 8月 21 12:38 mysql_3306 [root@localhost ~]# chown -R mysql.mysql /my_mysql/ [root@localhost ~]# ls -l /my_mysql/3306/ 总用量 8 drwxr-xr-x. 2 mysql mysql 6 8月 21 13:53 data -rw-r--r--. 1 mysql mysql 585 8月 21 12:14 my.cnf -rwxr-xr-x. 1 mysql mysql 916 8月 21 12:38 mysql_3306 [root@localhost ~]#
#执行初始化,生成mysql运行所需要的数据 [root@localhost ~]# /application/mysql-5.6.50-linux-glibc2.12-x86_64/scripts/mysql_install_db --defaults-file=/my_mysql/3306/my.cnf --basedir=/application/mysql-5.6.50-linux-glibc2.12-x86_64/ --datadir=/my_mysql/3306/data/ --user=mysql #两个OK之后运行成功 #此时会正常生成data数据 [root@localhost ~]# ls -l /my_mysql/3306/data/ 总用量 110600 -rw-rw----. 1 mysql mysql 12582912 8月 21 14:04 ibdata1 -rw-rw----. 1 mysql mysql 50331648 8月 21 14:04 ib_logfile0 -rw-rw----. 1 mysql mysql 50331648 8月 21 14:00 ib_logfile1 drwx------. 2 mysql mysql 4096 8月 21 14:00 mysql drwx------. 2 mysql mysql 4096 8月 21 14:04 performance_schema drwx------. 2 mysql mysql 6 8月 21 14:00 test
#初始化之前是没有数据的 [root@localhost ~]# ls -l /my_mysql/3307/data/ 总用量 0 #执行初始化,生成mysql运行所需要的数据 [root@localhost ~]# /application/mysql-5.6.50-linux-glibc2.12-x86_64/scripts/mysql_install_db --defaults-file=/my_mysql/3307/my.cnf --basedir=/application/mysql-5.6.50-linux-glibc2.12-x86_64/ --datadir=/my_mysql/3307/data/ --user=mysql #两个OK之后运行成功 #此时会正常生成data数据 [root@localhost ~]# ls -l /my_mysql/3307/data/ 总用量 110600 -rw-rw----. 1 mysql mysql 12582912 8月 21 14:06 ibdata1 -rw-rw----. 1 mysql mysql 50331648 8月 21 14:06 ib_logfile0 -rw-rw----. 1 mysql mysql 50331648 8月 21 14:06 ib_logfile1 drwx------. 2 mysql mysql 4096 8月 21 14:06 mysql drwx------. 2 mysql mysql 4096 8月 21 14:06 performance_schema drwx------. 2 mysql mysql 6 8月 21 14:06 test [root@localhost ~]#
启动3306实例
#确保没有其他数据启动 [root@localhost ~]# netstat -antlp | grep mysql [root@localhost ~]# #启动数据库(用启动脚本) [root@localhost ~]# /my_mysql/3306/mysql_3306 start Starting Mysql.... /bin/sh: /applicationmysql-5.6.50-linux-glibc2.12-x86_64/bin/mysqld_safe: 没有那个文件或目录 [root@localhost ~]# #报错,是由于启动脚本写目录少了“/”
指定的mysql的my.cnf使用路径有问题
[root@localhost 3306]# /my_mysql/3306/mysql_3306 start Starting Mysql.... Logging to '/usr/local/mysql/data/localhost.localdomain.err'. [root@localhost 3306]# netstat -antlp |grep mysql [root@localhost 3306]#
未创建错误日志的的文件也会报错
[root@localhost 3306]# ./mysql_3306 start Starting Mysql.... 220821 15:07:20 mysqld_safe error: log-error set to '/my_mysql/3306/mysql_3306_error.log', however file don't exists. Create writable for user 'mysql'. #创建完成之后就正常了 [root@localhost 3306]# touch ./mysql_3306_error.log [root@localhost 3306]# ./mysql_3306 start Starting Mysql.... [root@localhost 3306]#
[root@localhost 3306]# netstat -antpu |grep mysql tcp6 0 0 :::3306 :::* LISTEN 3795/mysqld tcp6 0 0 :::3307 :::* LISTEN 2974/mysqld [root@localhost 3306]#