本次多实例可以用TAR二进制包配置,也可以用RPM安装包,文档最后有官方文档。
我会尽量写成自动脚本,方便大家操作,只需要复制到LINUX 之后就可以自动操作完成。
准备工作
tar安装包:默认已经下载好mysql 安装包,名称为: mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz ,我的安装包位置:/root 。我服务器没有网络,只能通过sftp上传。
安装位置:mysql程序安装路径为:/usr/local/mysql ,数据库路径为:/usr/local/mysql/data。路径可以修改,只要批量把脚本中的路径替换即可。
MYSQL安装
可参考文档 CentOS 7 MySQL5.7 TAR包解压 全自动化脚本
#创建mysql用户组 groupadd mysql #创建一个用户名为mysql的用户并加入mysql用户组 useradd -g mysql mysql #制定password 为123456 passwd mysql #我安装到/usr/local tar -zxvf mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz mv mysql-5.7.21-linux-glibc2.12-x86_64 /usr/local/mysql cd /usr/local #更改所属的组和用户 chown -R mysql mysql/ chgrp -R mysql mysql/ cd mysql/ #数据库路径 mkdir data chown -R mysql:mysql data
mv /etc/my.cnf /etc/my.cnf.back
#写入配置cat>> /etc/my.cnf<<EOF [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] skip-name-resolve #设置3306端口 port = 3306 # 设置mysql的安装目录 basedir=/usr/local/mysql # 设置mysql数据库的数据的存放目录 datadir=/usr/local/mysql/data pid-file=/usr/local/mysql/data/mysql.pid # 允许最大连接数 max_connections=200 # 服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB lower_case_table_names=1 max_allowed_packet=16M EOF#安装和初始化 # 注data目录中不能有文件bin/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/#安装服务 cp ./support-files/mysql.server /etc/init.d/mysqld chown 777 /etc/my.cnf chmod +x /etc/init.d/mysqld # 启动服务 /etc/init.d/mysqld start #设置开机启动 chkconfig --level 35 mysqld on chkconfig --list mysqld chmod +x /etc/rc.d/init.d/mysqld chkconfig --add mysqld chkconfig --list mysqld service mysqld status
#配置etc/profile/ 用于mysql登录 # 在unset i后添加export PATH=$PATH:/usr/local/mysql/bin sed -i '/unset i/a export PATH=$PATH:/usr/local/mysql/bin' /etc/profile source /etc/profile
#登录
mysql -uroot -p
#到此mysql安装完成
多实例配置
位置在:/data 路径中,创建3个目录分别为:3307 ,3308,3309。这三个实例的端口号也是 3307 ,3308,3309
#准备多个目录 mkdir -p /data/330{7,8,9}/data #创建配置文件 cat>> /data/3307/my.cnf<<EOF [mysqld] basedir=/usr/local/mysql datadir=/data/3307/data pid-file=/data/3307/data/mysql.pid log_error=/data/3307/data/mysql.log socket=/data/3307/mysql.sock log_bin=/data/3307/mysql-bin user=mysql port=3307 server_id=3307 EOF #复制配置文件 cp /data/3307/my.cnf /data/3308 cp /data/3307/my.cnf /data/3309 #修改地址 sed -i 's#3307#3308#g' /data/3308/my.cnf sed -i 's#3307#3309#g' /data/3309/my.cnf #初始化数据库 mysqld --initialize-insecure --user=mysql --datadir=/data/3307/data --basedir=/usr/local/mysql mysqld --initialize-insecure --user=mysql --datadir=/data/3308/data --basedir=/usr/local/mysql mysqld --initialize-insecure --user=mysql --datadir=/data/3309/data --basedir=/usr/local/mysql #授权 chown -R mysql.mysql /data/* cd /usr/lib/systemd/system/ at>>mysqld3307.service<<EOF [Unit] Description=MySQL3307 Service Documentation=man:mysqld(8) Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html After=network.target After=syslog.target [Install] WantedBy=multi-user.target [Service] User=mysql Group=mysql Type=forking PIDFile=/data/3307/data/mysql.pid # Disable service start and stop timeout logic of systemd for mysqld service. TimeoutSec=0 # Execute pre and post scripts as root PermissionsStartOnly=true # Needed to create system tables #ExecStartPre=/usr/bin/mysqld_pre_systemd # Start main service ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf --daemonize --pid-file=/data/3307/data/mysql.pid $MYSQLD_OPTS # Use this to switch malloc implementation EnvironmentFile=-/etc/sysconfig/mysql # Sets open_files_limit LimitNOFILE = 5000 Restart=on-failure RestartPreventExitStatus=1 EOF
#复制配置文件 cp mysqld3307.service mysqld3308.service cp mysqld3307.service mysqld3309.service #修改地址 sed -i 's#3307#3308#g' mysqld3308.service sed -i 's#3307#3309#g' mysqld3309.service #重新加载服务配置文件 systemctl daemon-reload #启动服务 systemctl start mysqld3307.service systemctl start mysqld3308.service systemctl start mysqld3309.service #开机启动 systemctl enable mysqld3307.service systemctl enable mysqld3308.service systemctl enable mysqld3309.service 验证多实例 netstat -lnp|grep 330 mysql -S /data/3307/mysql.sock -e "select @@server_id" mysql -S /data/3308/mysql.sock -e "select @@server_id" mysql -S /data/3309/mysql.sock -e "select @@server_id" netstat -lnp|grep 330 #查看服务是否启动 ps -ef | grep mysql #查看MySQL进程 ps -axo cmd | grep mysql #查看MySQL进程
官方上档:https://dev.mysql.com/doc/refman/5.7/en/using-systemd.html