mysql主从复制系列(1)——搭建多个mysql实例环境

211 阅读4分钟
搭建多个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