Mysql安装以及主从配置

作者:zhangyunlong 发布时间: 2023-09-10 阅读量:3 评论数:0

MySQL主从复制

1. 原理

image-ZEyZ.png

主bin-log 从relay-log

主dump 从io、sql

两个日志(master的bin-log和slave的relay log)

三个线程(master的dump线程、slave的io线程和sql线程)

1.master(主服务器)执行DDL或DML语句时,会记录bin-log

2.bin-log写入成功后,dump线程会通知slave(从服务器)节点

3.slave使用io线程读取master的bin-log日志,并写入relay log中

4.slave使用sql线程将relay log中新添加的内容转换为SQL语句并执行,从而实现从节点(slave)与主节点(master)的数据一致

线程是进程中任务最小执行单元,一个进程中可以包含多个线程,执行相同或不同的功能,实现多线程并发执行。

master服务器开启了一个dump线程,slave服务器开启了一个IO线程和一个SQL线程。

2. 主从复制的作用

1.实时备份:主服务器实时备份数据到从服务器,主服务器中数据丢失时,可以重从服务中恢复数据。

2.读写分离:主服务器负责写(insert\delete\update),从服务器主要负责读(select)的操作。

3.高可用集群:当主服务器突然下线,从服务器可以很快的接替主服务器的功能。

4.负载均衡:将原本一台服务器处理的请求分发给多台服务器去处理,适用于高并发场景,防止单台服务器负载过高崩溃。

3. 主从复制的核心目标

1.读写分离:主库承担写操作,从库分担读压力(如查询),提升系统吞吐量;

2.数据备份:从库作为主库的副本,避免单库故障导致数据丢失;

3.高可用:主库故障时,可切换到从库继续提供服务(需配合故障转移工具);

4.负载均衡:多从库架构下,将读请求分散到不同从库,降低单库压力。


安装Mysql

1. 上传mysql rpm包

下载地址https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.36-1.el7.x86_64.rpm-bundle.tar

2. 解压安装包

tar -xvf mysql-8.0.36-1.el7.x86_64.rpm-bundle.tar

3. 卸载多余的依赖包

yum remove mysql-libs

4. 执行安装

rpm -ivh mysql-community-client-plugins-8.0.36-1.el7.x86_64.rpm
rpm -ivh mysql-community-common-8.0.36-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.36-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.36-1.el7.x86_64.rpm
rpm -ivh mysql-community-icu-data-files-8.0.36-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-8.0.36-1.el7.x86_64.rpm

5. 删除安装包

rm -rf ./*.rpm

6. 指定模式

echo -e "sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"" >> /etc/my.cnf

7. 启动服务

systemctl start mysqld

8. 获取初始密码

cat /var/log/mysqld.log

9. 使用初始密码登录

mysql -uroot -p初始密码

10. 修改root密码

alter user 'root'@'localhost' identified by '新密码';

11. 开启mysql的root用户远程访问

use mysql;
update user set host = '%' where user = 'root';
flush privileges;


Mysql卸载

systemctl stop mysqld
yum remove mysql mysql-server
rpm -e mysql-server
rpm -e mysql
rm -rf /var/lib/mysql
rm /etc/my.cnf

Mysql配置主从同步

主库:

1. 开启binlog

编辑/etc/my.cnf配置文件, 在[mysql]块下添加内容, 然后重启mysql服务:

# 开启binlog
log-bin=mysql-bin
# id, 要求唯一
server_id=1
# 要同步的库名, 多个库名用英文逗号间隔
binlog-do-db=by_test

2. 导出主库数据, 多个库名之间空格间隔

mysqldump -uusername -ppassword -h 127.0.0.1 by_test > /opt/by_test.dump

导出的dump文件备用

3. 获取主库目前的binlog状态

先登录主库mysql:
mysql -uusername -ppassword -h 127.0.0.1
刷新到最新log
flush logs;
获取当前状态
show master status;
保留file和position的值备用

从库:

1. 编辑/etc/my.cnf配置文件, 在[mysql]块下添加内容, 然后重启mysql服务:

# id, 要求唯一
server_id=2
# 要复制的库名, 多个库名用英文逗号间隔, 不写则同步所有可以同步的库
replicate-do-db=by_test

2. 创建要导入的库, 库名和主库保持一致

create database xxx;

3. 导入主库的备份数据到从库

mysql -uusername -ppassword by_test < /opt/by_test.dump

4. 准备同步

先登录从库数据库
mysql -uusername -ppassword -h 127.0.0.1
执行change master to 语句
CHANGE MASTER TO MASTER_HOST='主库IP', MASTER_USER='主库用户名', MASTER_PASSWORD='主库密码', MASTER_LOG_FILE='主库binlog状态的file值', MASTER_LOG_POS=主库binlog状态的position值;

5. 执行同步命令

start slave;

6. 查看同步状态

show slave status;

评论