linux搭建主从mysql
分库:垂直拆分,一库变多库。对应单体应用变成分布式架构,有多个服务,一库变多库
分表:水平拆分,一表变多表。单表数据量大,要拆分成多表
show variables like '%max_connections%';--查看最大连接数
show global status like 'max_used_connections';--查看当前连接数
大数据量下数据库瓶颈解决:
- SQL优化
- 索引优化
- 缓存
- 搜索引擎
- 读写分离
- 分库分表
读写分离:
多数据源区分读和写,查询和写都使用单独的数据源。
一般是写为主库,读为从库。
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线程从中转日志文件中读取数据写入从机库中。
主从配置:
在主机中的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表示正常
也可以进行数据库的增删改操作来验证