linux搭建主从mysql

分库:垂直拆分,一库变多库。对应单体应用变成分布式架构,有多个服务,一库变多库

分表:水平拆分,一表变多表。单表数据量大,要拆分成多表

show variables like '%max_connections%';--查看最大连接数
show global status like 'max_used_connections';--查看当前连接数

大数据量下数据库瓶颈解决:

  1. SQL优化
  2. 索引优化
  3. 缓存
  4. 搜索引擎
  5. 读写分离
  6. 分库分表

读写分离:

多数据源区分读和写,查询和写都使用单独的数据源。

一般是写为主库,读为从库。

image-20210622094633154

linux安装mysql环境

官网下载mysql

linux

 yum list installed | grep mariadb	#检查是否存在mariadb
 
 yum remove mariadb-libs.x86_64	#有的话就删掉
 #然后解压mysql的压缩包
 tar -zxvf mysql -C /usr/local	#将mysql解压到local目录下

在解压目录下创建/data/3306 文件夹,切换到mysql的解压之后的目录下,执行命令

mkdir data	#创建data目录
mkdir 3306  #创建3306文件夹 存放3306端口的数据
#添加用户组
groupadd mysql	#创建用户组mysql
useradd mysql -g mysql	#创建用户mysql并放入mysql用户组中

切换到bin目录下,进行初始化操作

./mysqld --initialize-insecure --user=mysql --datadir=/usr/local/mysql-5.7.24/data/3306 --basedir=/usr/local/mysql-5.7.24

mysqld命令

--initialize-insecure 初始化不生成密码

--user=mysql mysql用户

--datadir=/usr/local/mysql-5.7.24/data/3306 指定数据目录

--basedir=/usr/local/mysql-5.7.24 mysql的基础目录

#创建安全连接访问相关的东西
./mysql_ssl_rsa_setup --datadir=/usr/local/mysql-5.7.24/data/3306
#更改mysql整个文件目录的权限所属,
chown -R mysql:mysql /usr/local/mysql-5.7.24
#在3306文件夹下创建my.cnf文件
vim my.cnf	#创建并开始编辑my.cnf文件 

启动mysql

在bin目录下有个mysqld_safe

./mysqld_safe --defaults-file=/usr/local/mysql-5.7.24/data/3306/my.cnf &

#关闭mysql服务
./mysqladmin -uroot -p -P3306 -h127.0.0.1 shutdown

&表示后台启动

根据my.cnf配置文件中的配置去启动mysql

ps -ef | grep mysql	#检查mysql进程
#修改密码,在bin目录下执行
./mysql -uroot -p -P3306 -h127.0.0.1
#开始修改密码
alter user 'root'@'localhost' identified by '123456'

#授权远程访问
grant all privileges on *.* to root@'%' identified by '123456'

#关闭防火墙,临时关闭防火墙,重启后失效
systemctl stop firewalld
#永久性关闭
systemctl disabled firewalld #将防火墙设置不可用,然后再执行stop

#防火墙开放端口 开放3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
#重新加载防火墙配置
firewall-cmd --reload
#重启防火墙
systemctl restart firewall

#查看某个端口是否开启
firewall-cmd --query-port=8080/tcp

#取消端口开放
firewall-cmd --permanent --zone=public --remove-port=3306/tcp

#查看哪些端口开启
firewall-cmd --list-port

一台主机搭建多个mysql

在mysql的安装目录下创建/data/4406目录

执行初始化命令

./mysqld --initialize-insecure --user=mysql --datadir=/usr/local/mysql-5.7.24/data/4406 --basedir=/usr/local/mysql-5.7.24

在4406目录下创建my.cnf文件

配置my.cnf文件

启动mysql

./mysqld_safe --defaults-file=/usr/local/mysql-5.7.24/data/4406/my.cnf &

#刷新权限
flush privileges

mysql主从环境搭建(一主一从)

原理:主机的数据发生修改时会把这些数据在binary log文件中记录下来,从机有两个线程是异步的是延迟的,两个线程分别是I/O线程和sql线程,i/o线程把主机的binary log文件读到从机中写到从机的Relay log(中转日志)文件中,sql线程从中转日志文件中读取数据写入从机库中。

image-20210622144433397

主从配置:

在主机中的my.cnf文件中加入

log-bin=mysql-bin	#表示启用二进制日志

server-id=3306	#表示server编号,编号要唯一

在从机中的my.cnf文件中加入

server-id=4406	#表示server编号,编号要唯一

read_only=1

启动服务

进入到bin目录,重启两个mysql服务

#3306	主
./mysqld_safe --defaults-file=/usr/local/mysql-5.7.24/data/4406/my.cnf &;
#4406	从
./mysqld_safe --defaults-file=/usr/local/mysql-5.7.24/data/4406/my.cnf &;

至此只建立了主从角色,还没有将主从关联起来

主从设置-建立关系

在主库上创建复制数据的账号并授权

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

#查看主服务器状态
show master status;
#将主库重置为初始状态
reset master;

对从库的操作

#查看从库状态
show slave status;
#重置从库初始状态
stop slave;	#停止复制
reset slave; #重置状态

#建立关系
change master to master_host='ip',master_user='copy',master_port=3306,master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=154;

#开始执行复制命令
start slave

如果是一主多从,则只需要在每个从库上执行:

#建立关系
change master to master_host='ip',master_user='copy',master_port=3306,master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=154;

#开始执行复制命令
start slave

验证:

检查从库复制功能是否正常

show slave status \G;
--双yes表示正常

也可以进行数据库的增删改操作来验证

posted @ 2021-06-22 15:36  zhaojunjin  阅读(165)  评论(0编辑  收藏  举报