对mysql进行主从复制的简单操作,只限于简单操作,下面的操作均在 centos8 中进行的,centos7也可以看,无妨
主从复制的操作主要分为无数据复制和有数据复制,但是主从关系分为好多种
主从复制
主从复制(也称 AB 复制)允许将来自一个MySQL数据库服务器(主服务器)的数据复制到一个或多个MySQL数据库服务器(从服务器)。
- MySQL主从复制的优点包括:
- 横向扩展解决方案 - 在多个从站之间分配负载以提高性能。在此环境中,所有写入和更新都必须在主服务器上进行。但是,读取可以在一个或多个从设备上进行。该模型可以提高写入性能(因为主设备专用于更新),同时显着提高了越来越多的从设备的读取速度。
- 数据安全性 - 因为数据被复制到从站,并且从站可以暂停复制过程,所以可以在从站上运行备份服务而不会破坏相应的主数据。
- 分析 - 可以在主服务器上创建实时数据,而信息分析可以在从服务器上进行,而不会影响主服务器的性能。
- 备份 - 可以使用从服务器数据进行备份,减轻主服务器的压力。
- Replication的原理
- 前提是作为主服务器角色的数据库服务器必须开启二进制(binlog)日志
- 原理 主服务器上面的任何修改都会保存在二进制日志( Bin-log日志) 里面。 从服务器上面启动一个I/O线程, 连接到主服务器上面请求读取二进制(Bin-log)日志,然后把读取到的二进制日志写到本地的Realy-log(中继日志)里面。 从服务器上面同时开启一个SQL线程,读取Realy-log(中继日志),如果发现有更新立即把更新的内容在本机的数据库上面执行一遍。
无数据复制
- 环境准备
主要准备两个纯净版虚拟机,用来安转mysql,不过不是纯净虚拟机没关系
下面这几个操作是两个虚拟机都需要做的
- 清除环境
# 清除虚拟机中的mysql和mariaba相关文件
yum -y erase `rpm -qa | grep -E "mysql|mariadb"`
# 清除相关的文件
rm -rf /etc/my* /var/lib/mysql* /var/log/mysql*
# 看是否清楚干净
[[ ! -f /etc/my.cnf ]] && [[ ! -d /var/lib/mysql ]] && [[ ! -f /usr/bin/mysql ]] && echo "数据库已清除" || echo "数据库未清理"
- 关闭防火墙和SELinux
systemctl stop firewalld;setenforce 0
- 安装mysql
如果不会安装mysql的话看 =》 mysql安装
yum install -y mysql-community-server
- 启动mysql服务and修改密码
systemctl start mysqld
mysqladmin -p"`awk '/temporary password/{p=$NF}END{print p}' /var/log/mysqld.log`" password '1'
下面分主库和从库
主库
- 配置mysql
# 配置log-bin
mkdir /data/log-bin -p
chown mysql.mysql /data/log-bin -R
vim /etc/my.cnf
# 里面添加下面两句
server-id=1
log-bin=/data/log-bin/mysql-bin# 重启mysql
systemctl restart mysqld
- 添加用户授权
mysql -p1
mysql> create user 'lx'@'%' identified by '1';
mysql> grant replication slave on *.* to 'lx'@'1';
mysql> flush privileges;
- 查看master状态
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 1264 | | | |
+------------------+----------+--------------+------------------+-------------------+
从库
- 配置mysql文件
vim /etc/my.cnf
server-id=2# 重启数据库
systemctl restart mysqld
- mysql配置相关设置
mysql -p1
mysql> change master to-> master_host='主库ip',-> master_port=3306,-> master_user='lx',-> master_password='1',-> master_log_file='mysql-bin.000001',-> master_log_pos=1264;
- 启动 slave
mysql> start slave;
- 查看状态
mysql> show slave status;
Slave_IO_State: Waiting for source to send eventMaster_Host: masterMaster_User: lMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000001Read_Master_Log_Pos: 781Relay_Log_File: slave-relay-bin.000002Relay_Log_Pos: 326Relay_Master_Log_File: mysql-bin.000001Slave_IO_Running: YesSlave_SQL_Running: Yes
# 上面两个是yes,则表示配置成功
# 如果有问题的话,注意两个服务器的防火墙SELinux要关掉,配置要写对之类的问题
# 之后的话在主库做的修改在从库中就能看到了
有数据复制
思路:锁库,备份数据文件 然后配置主从复制
- 环境准备
主要准备两个纯净版虚拟机,用来安转mysql,不过不是纯净虚拟机没关系
下面这几个操作是两个虚拟机都需要做的
- 清除环境
# 清除虚拟机中的mysql和mariaba相关文件
yum -y erase `rpm -qa | grep -E "mysql|mariadb"`
# 清除相关的文件
rm -rf /etc/my* /var/lib/mysql* /var/log/mysql*
# 看是否清楚干净
[[ ! -f /etc/my.cnf ]] && [[ ! -d /var/lib/mysql ]] && [[ ! -f /usr/bin/mysql ]] && echo "数据库已清除" || echo "数据库未清理"
- 关闭防火墙和SELinux
systemctl stop firewalld;setenforce 0
- 安装mysql
如果不会安装mysql的话看 =》 mysql安装
yum install -y mysql-community-server
- 启动mysql服务and修改密码
systemctl start mysqld
mysqladmin -p"`awk '/temporary password/{p=$NF}END{print p}' /var/log/mysqld.log`" password '1'
下面分主库和从库
主库
- 配置mysql
# 配置log-bin
mkdir /data/log-bin -p
chown mysql.mysql /data/log-bin -R
vim /etc/my.cnf
# 里面添加下面两句
server-id=1
log-bin=/data/log-bin/mysql-bin# 重启mysql
systemctl restart mysqld
- 添加用户授权
mysql -p1
mysql> create user 'lx'@'%' identified by '1';
mysql> grant replication slave on *.* to 'lx'@'1';
mysql> flush privileges;
- 锁库
mysql> flush tables with read lock;
- 查看master状态 重新打开一个窗口
mysql> show master status;
- 备份文件
mysqldump -uroot -p1 -A > /all.sql
# 复制到从库的服务器上
scp /all.sql 从库服务器ip:/
- 查看master状态
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 1264 | | | |
+------------------+----------+--------------+------------------+-------------------+
- 解锁
mysql> unlock tables;
从库
- 配置mysql文件
vim /etc/my.cnf
server-id=2# 重启数据库
systemctl restart mysqld
- 导入数据
mysql -p1 < /all.sql
- mysql配置相关设置
mysql -p1
mysql> change master to-> master_host='主库ip',-> master_port=3306,-> master_user='lx',-> master_password='1',-> master_log_file='mysql-bin.000001',-> master_log_pos=1264;
- 启动 slave
mysql> start slave;
- 查看状态
mysql> show slave status;
Slave_IO_State: Waiting for source to send eventMaster_Host: masterMaster_User: lMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000001Read_Master_Log_Pos: 781Relay_Log_File: slave-relay-bin.000002Relay_Log_Pos: 326Relay_Master_Log_File: mysql-bin.000001Slave_IO_Running: YesSlave_SQL_Running: Yes
# 上面两个是yes,则表示配置成功
# 如果有问题的话,注意两个服务器的防火墙SELinux要关掉,配置要写对之类的问题
# 之后的话在主库做的修改在从库中就能看到了