测试环境经常有多个项目要开发和测试。为了使项目之间的数据隔离,避免不了新启动数据库实例来应对不同的项目。今天记录在5.7.26的版本下,如何实现多个实例。
1.首先新建一个目录。这个目录用于存放另一个实例的数据库文件。
mkdir -p /var/lib/mysql_3308/data #新增路径
chmod 777 /var/lib/mysql_3308/data #设置该路径权限
2.复制my.cnf文件到/var/lib/mysql_3308目录下。以便从此处开始启动。
cp /var/mysql/my.cnf /var/lib/mysql_3308
chmod 644 /var/lib/mysql_3308 #后来要指定权限才能被使用
3.更改复制过去的my.cnf的配置信息。
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
[client]
port=3308
default-character-set=utf8mb4
socket=/var/lib/mysql/mysql_3308.sock
[mysql]
default-character-set = utf8mb4
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
port = 3308
datadir=/var/lib/mysql_3308/data
socket=/var/lib/mysql/mysql_3308.sock
character_set_server=utf8mb4
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
init_connect='SET NAMES utf8mb4'
collation-server=utf8mb4_unicode_ci
log-error=/var/log/mysqld_3308.log
pid-file=/var/run/mysqld/mysqld_3308.pid
explicit_defaults_for_timestamp=true
lower_case_table_names=1
#log-bin=/etc/mysql/mysql-bin #开启二进制日志
max_connections=1000
server-id=3308 #设置server-id
#binlog-do-db = acexeym_comm
#binlog-do-db = acexeym_company
#skip-grant-tables
4.初始化数据库文件。该命令会初始化mysql的数据库。
mysqld --defaults-file=/var/lib/mysql_3308/my.cnf --initialize-insecure --user=mysql
5.然后启动数据库,注意使用chmod 777 给相关目录以权限。
mysqld --defaults-file=/var/lib/mysql_3308/my.cnf --skip-grant-tables --user=mysql #不使用验证检测登陆
6.打开另一个窗口,使用mysql客户端命令连接,更改密码及登陆权限 。
mysql -u root -P 3308 -S /var/lib/mysql/mysql_3308.sock #注意要指定连接的socket,否则默认使用主mysql的socket,导致连接到其它实例上。切记。因为这个细节,导致后面一直配置登陆出问题。
mysql > use mysql;
mysql > show databases; #主要目的是看一下,是否是新建的实例
mysql > UPDATE user SET Host='%',authentication_string=PASSWORD('xxx') WHERE User='root';
mysql > flush privileges; #刷新配置信息
mysql > exit;
7.启动后,连接数据库。
netstat -anp|grep 3308 #查看实例启动的id
kill -9 id #终止实例
mysqld --defaults-file=/var/lib/mysql_3308/my.cnf --user=mysql #重新启动数据库,远程连接测试
8.配置为supervisor守护启动。
[program:mysql_3308]
command=/usr/sbin/mysqld --defaults-file=/var/lib/mysql_3308/my.cnf --user=mysql
;directory= ; 执行前要不要先cd到目录去,一般不用
priority=1 ;数字越高,优先级越高
numprocs=1 ; 启动几个进程
autostart=true ; 随着supervisord的启动而启动
autorestart=true ; 自动重启。。当然要选上了
startretries=10 ; 启动失败时的最多重试次数
exitcodes=0 ; 正常退出代码
stopsignal=KILL ; 用来杀死进程的信号
stopwaitsecs=10 ; 发送SIGKILL前的等待时间
redirect_stderr=true ; 重定向stderr到stdout
stdout_logfile_maxbytes = 1024MB
stdout_logfile_backups = 10
stdout_logfile = /var/run/log/mysql_3308.log
autostart=true
autorestart=true
startsecs=3