加入收藏 | 设为首页 | 会员中心 | 我要投稿 航空爱好网 (https://www.52kongjun.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL集群搭建

发布时间:2022-12-17 14:04:27 所属栏目:MySql教程 来源:转载
导读: 1.主从复制概述
主从复制是指服务器分为主服务器和从服务器,主服务器负责读和写,从服务器只负责读,主从复制也叫master/slave, master 是主,salve是从,但是并没有强制,也就是说从也可

1.主从复制概述

主从复制是指服务器分为主服务器和从服务器,主服务器负责读和写,从服务器只负责读,主从复制也叫master/slave, master 是主,salve是从,但是并没有强制,也就是说从也可以写,主也可以读,只不过一般不这么做。

主从复制可以实现对数据库备份和读写分离。

2.主从复制架构2.1 一主多从架构

一主多次,如果主服务器挂了,就不能写数据了,但可以读。保证读的高可用。

mysql集群_mysql 高可用 集群_mysql 集群 软件

2.2 双主双从模式

如下图,3307和3308 互为主从,即是主又是从。但是假如3307挂了,3308可以继续用,但3309就不可以用了,即是可以读也不是最新的,因为3308不会把数据同步到3309。保证写的高可用。

mysql集群_mysql 集群 软件_mysql 高可用 集群

2.3 主从复制原理

执行流程:

1.从库不断的试探主库的二进制日志文件,如果这个文件有更新则发送请求到来获取主库中心的内容。

2.向主库中写数据:包括添加、删除、修改、建库建表等等。

3.主将写的命令记录到二进制日志文件并更新二进制日志文件的偏移量。

4.如果从发试探主的二进制文件域从记录的偏移量值不同则表示主库有更新,那么就启动IO线程向主库请求从某个偏移量是开始到二进制日期文件结束位置之间所有的数据。

5.主库根据从库的请求偏移量位置来推送数据到从库中,然后从接收到数据以后,会更新从库所记录的偏移量位置。

6.从库获取主库的数据以后,将这些命令数据写入中继日志文件中,然后唤醒SQL线程同时让当前的IO线程挂起(休眠等待)。

7.SQL线程根据记录的中继日志文件的偏移量读取中继日志文件中的命令。

8.SQL线程拿到命令以后再本地数据库进行回放(就是在数据库中执行主库的SQL语句),回放完成当前的SQL线程挂起(休眠等待)。

3.搭建主从复制

下载mysql安装包mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz,下载地址:,并上传服务器器/usr/local/目录下,并解压,修改文件名称为mysql,成功之后如下。

mysql集群_mysql 集群 软件_mysql 高可用 集群

在一台虚机上创建3个mysql实例,以端口区分,模拟在不同的虚机上安装的mysql。

3.1 创建三个mysql实例

在/usr/local/目录下创建mysql目录,接着创建3307,3308,3309三个目录。

mysql 集群 软件_mysql 高可用 集群_mysql集群

初始化mysql数据库,分别执行以下命令:

/usr/local/mysql/bin/mysqld ?--initialize-insecure ?--basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/3307 ?--user=mysql
/usr/local/mysql/bin/mysqld ?--initialize-insecure ?--basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/3308 ?--user=mysql
/usr/local/mysql/bin/mysqld ?--initialize-insecure ?--basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/3309 ?--user=mysql

mysql集群_mysql 集群 软件_mysql 高可用 集群

3.2 创建配置文件my.cnf

在/usr/local/mysql/data/3307下,配置3307实例的的配置文件my.cnf,如下

[client]
port =3307
socket=/usr/local/mysql/data/3307/mysql.sock
default-character-set=utf8

[mysqld]
port =3307
socket= /usr/local/mysql/data/3307/mysql.sock
datadir= /usr/local/mysql/data/3307
log-error= /usr/local/mysql/data/3307/error.log
pid-file= /usr/local/mysql/data/3307/mysql.pid

character-set-server=utf8
lower-case_table_names=1
autocommit=1

mysql 高可用 集群_mysql 集群 软件_mysql集群

3308 实例和3309实例与3307的实例my.cnf配置一下,分别在对应目录下创建对应my.cnf,只是配置的端口不一样。

3308的配置my.cnf

[client]
port =3308
socket=/usr/local/mysql/data/3308/mysql.sock
default-character-set=utf8

[mysqld]
port =3308
socket= /usr/local/mysql/data/3308/mysql.sock
datadir= /usr/local/mysql/data/3308
log-error= /usr/local/mysql/data/3308/error.log
pid-file= /usr/local/mysql/data/3308/mysql.pid

character-set-server=utf8
lower-case_table_names=1
autocommit=1

3309的配置my.cnf

[client]
port =3309
socket=/usr/local/mysql/data/3309/mysql.sock
default-character-set=utf8

[mysqld]
port =3309
socket= /usr/local/mysql/data/3309/mysql.sock
datadir= /usr/local/mysql/data/3309
log-error= /usr/local/mysql/data/3309/error.log
pid-file= /usr/local/mysql/data/3309/mysql.pid

character-set-server=utf8
lower-case_table_names=1
autocommit=1

3.3 启动mysql实例命令

/usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql/data/3307/my.cnf ?--user=root &
/usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql/data/3308/my.cnf ?--user=root &
/usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql/data/3309/my.cnf ?--user=root &

启动完成之后,查看启动的进程。

ps -ef|grep mysql

mysql 高可用 集群_mysql 集群 软件_mysql集群

3.4 登录mysql实例和修改密码

登录3307的mysql实例

/usr/local/mysql/bin/mysql -h127.0.0.1 -uroot  -P3307 -p

修改3307的密码

alter user 'root'@'localhost' identified by 'root';

授权远程访问(这样远程客户端才能访问)

grant all privileges on  *.*  to root@'%' identified by 'root';

刷新权限:

flush privileges;

参照以上步骤,同时修改3308和3309mysql实例,至此三个mysql实例已经启动完毕。

关闭mysql服务

一种命令:mysqladmin -uroot -p -P3307 -h127.0.0.1 shutdown

一种命令:登录设备之后,执行shutdown

4.一主多从环境配置

修改3307的mysql实例my.cnf

log-bin=mysql-bin

server-id=3307

mysql 集群 软件_mysql集群_mysql 高可用 集群

修改3308和3309的实例my.cnf

server-id=3308

mysql集群_mysql 集群 软件_mysql 高可用 集群

server-id=3309

mysql 集群 软件_mysql集群_mysql 高可用 集群

重启3307、3308和3309的实例

/usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql/data/3307/my.cnf  --user=root &
/usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql/data/3308/my.cnf --user=root &
/usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql/data/3309/my.cnf --user=root &

4.1 主服务器3307的配置

登录3307实例,在主服务器上创建复制数据的账号并授权。

grant replication slave on . to 'copy'@'%' identified by 'root';

主库特有的属性

show  master status;

mysql 高可用 集群_mysql 集群 软件_mysql集群

如果主服务器状态不是初始状态,需要重置。

reset master

mysql 高可用 集群_mysql 集群 软件_mysql集群

4.2 从服务器3308的配置

登录3308实例

/usr/local/mysql/bin/mysql -h127.0.0.1 -uroot -P3308 -p

执行命令:

change master to master_host = '192.168.120.123' ,master_port=3307, master_user='copy',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=154;

start slave;

查看salve 状态

show slave status \G;

mysql 集群 软件_mysql 高可用 集群_mysql集群

登录3309实例

/usr/local/mysql/bin/mysql -h127.0.0.1 -uroot -P3309 -p

执行命令:

change master to master_host = '192.168.120.123' ,master_port=3307, master_user='copy',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=154;

start slave ;

查看slave 状态

show slave status;

mysql 高可用 集群_mysql 集群 软件_mysql集群

至此一主多从配置完成。

4.3 测试一主多从

在3307mysql主实例上创建数据库,3308和3309 实例也分别创建了对应的数据库。

mysql 集群 软件_mysql 高可用 集群_mysql集群

mysql 集群 软件_mysql集群_mysql 高可用 集群

mysql 集群 软件_mysql集群_mysql 高可用 集群

主要对从库进行写操作mysql集群,就有可能对主从同步关系影响,就会造成数据不一致。

查看主从复制binlog日志文件内容。

 show binlog events in 'mysql-bin.000001' \G;

mysql 高可用 集群_mysql 集群 软件_mysql集群

(编辑:航空爱好网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!