mysql主从复制操作

对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 event
                  Master_Host: master
                  Master_User: l
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 781
               Relay_Log_File: slave-relay-bin.000002
                Relay_Log_Pos: 326
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_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 event
                  Master_Host: master
                  Master_User: l
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 781
               Relay_Log_File: slave-relay-bin.000002
                Relay_Log_Pos: 326
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
# 上面两个是yes,则表示配置成功
# 如果有问题的话,注意两个服务器的防火墙SELinux要关掉,配置要写对之类的问题
# 之后的话在主库做的修改在从库中就能看到了

你可能感兴趣的:(云计算-脑力风暴,mysql,数据库,linux,sql,centos)