搭建多个mysql实例(均使用Ubuntu18虚拟机,mysql5.7)
两种方式
1、 不同主机上分别创建mysql服务,一台机一个mysql。【这个最简单,推荐实用,只要在不同主机上装mysql服务就行,可以参考这篇快速apt-get安装mysql】
2、 同一主机上,同一mysql服务上建立多个实例【这个配置搭建比较复杂,不推荐】
方法1
在每台主机上安装完mysql后,开始进行远程访问配置(这一块主要讲远程配置搭建,具体的主从复制配置留在后面)
一些基本信息
主库 192.168.5.149:3308 user:ying password:newman123
从库1 192.168.5.150:3308
从库2 192.168.5.151:3308
查看用户信息
select user, host from mysql.user;
确保用户的host是 % (表示可以任意主机以该用户身份登录mysql)
update mysql.user set host='%' where user='[用户名]';
flush privileges;
修改 /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address 改 0.0.0.0 或者 注释掉
重启 systemctl restart mysql
开放3306端口,服务器需要配置安全组规则,有防火墙需要开放3306
sudo ufw allow 3308
或者直接关了
sudo ufw disable
从库1为例,登录到主库
成功登录
方法2
以创建三个MySQL实例为例,分别对应端口为3306、3307、3308
默认用apt-get 的方式安装好了mysql5.7
停止MySQL并禁止其自动启动
sudo systemctl stop mysql
sudo systemctl disable mysql
创建目录&文件
一张图表示文件创建结构
数据存放位置
sudo mkdir -p /data/mysql/{3306,3307,3308}
pid 存放目录
sudo mkdir -p /data/mysql/pid
日志文件
sudo touch /data/mysql/error.log
修改目录权限
sudo chown -R mysql:mysql /data
编辑配置文件 ###
sudo cp /etc/mysql/my.cnf /etc/mysql/3306.cnf
sudo cp /etc/mysql/my.cnf /etc/mysql/3307.cnf
sudo cp /etc/mysql/my.cnf /etc/mysql/3308.cnf
[mysqld]
port=3306
datadir=/data/mysql/3306/
socket=/tmp/mysql3306.sock
symbolic-links=0
[mysqld_safe]
log-error=/data/mysql/3306.log
pid-file=/data/mysql/pid/3306.pid
[client]
port=3306
socket=/tmp/mysql3306.sock
-—————————————————
[mysqld]
port=3307
datadir=/data/mysql/3307/
socket=/tmp/mysql3307.sock
symbolic-links=0
[mysqld_safe]
log-error=/data/mysql/3307.log
pid-file=/data/mysql/pid/3307.pid
[client]
port=3307
socket=/tmp/mysql3307.sock
-—————————————————
[mysqld]
port=3308
datadir=/data/mysql/3308/
socket=/tmp/mysql3308.sock
symbolic-links=0
[mysqld_safe]
log-error=/data/mysql/3308.log
pid-file=/data/mysql/pid/3308.pid
[client]
port=3308
socket=/tmp/mysql3308.sock
-—————————————————
编辑 my.cnf
文件
使用 mysqld_multi 管理多个实例
sudo vim /etc/mysql/my.cnf
[mysqld_multi]
mysqld=/usr/bin/mysqld_safe
mysqladmin=/usr/bin/mysqladmin
user=root
# 需要注意,是pass而不是password,用于后面使用stop时使用,可修改为你自定义的密码
pass=123456
[mysqld3306]
port=3306
server-id=3306
datadir=/data/mysql/3306/
log-bin=/data/mysql/3306/mysql-bin
pid-file=/data/mysql/pid/3306.pid
socket=/tmp/mysql3306.sock
log-error=/data/mysql/error.log
skip-external-locking
[mysqld3307]
port=3307
server-id=3307
datadir=/data/mysql/3307/
log-bin=/data/mysql/3307/mysql-bin
pid-file=/data/mysql/pid/3307.pid
socket=/tmp/mysql3307.sock
log-error=/data/mysql/error.log
skip-external-locking
[mysqld3308]
port=3308
server-id=3308
datadir=/data/mysql/3308/
log-bin=/data/mysql/3308/mysql-bin
pid-file=/data/mysql/pid/3308.pid
socket=/tmp/mysql3308.sock
log-error=/data/mysql/error.log
skip-external-locking
[mysql]
no-auto-rehash
给mysqld目录访问权限
sudo vim /etc/apparmor.d/usr.sbin.mysqld
添加
/data/mysql/ r,
/data/mysql/** rwk,
sudo service apparmor restart
通过配置文件初始化3306、3307、3308实例
sudo mysqld --defaults-file=/etc/mysql/3306.cnf --initialize-insecure --user=mysql --explicit_defaults_for_timestamp
sudo mysqld --defaults-file=/etc/mysql/3307.cnf --initialize-insecure --user=mysql --explicit_defaults_for_timestamp
sudo mysqld --defaults-file=/etc/mysql/3308.cnf --initialize-insecure --user=mysql --explicit_defaults_for_timestamp
修改目录权限为本机用户
sudo chown -R <用户名>:root /data
启动命令
mysqld_multi start 3306-3308
查看实例是否运行
mysqld_multi report
设置root密码
mysqladmin -u root password [password] -S /tmp/mysql3306.sock
mysqladmin -u root password [password] -S /tmp/mysql3307.sock
mysqladmin -u root password [password] -S /tmp/mysql3308.sock
尝试连接实例
mysql -u root -p -S /tmp/mysql3306.sock
mysql -u root -p -S /tmp/mysql3308.sock
mysql -u root -p -S /tmp/mysql3307.sock
远程登录mysql
在配置主从复制时,即便是在同一主机下,也要用到远程登录
查看用户信息
select user, host from mysql.user;
确保用户的host是 % (表示可以任意主机以该用户身份登录mysql)
update mysql.user set host='%' where user='[用户名]';flush privileges;
“
修改 /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address 改 0.0.0.0 或者 注释掉
重启 systemctl restart mysql
开放3306端口,服务器需要配置安全组规则,有防火墙需要开放3306
sudo ufw allow 3306
测试登录
mysql -h localhost -u slave3 -p -P 3306 -S /tmp/mysql3306.soc