Mysql数据库主从复制的部署

为什么要部署主从复制

  • 在一些企业网站中,后端Mysql 数据库只有一台时,会有以下问题
    1)单点故障点,服务不可用
    2)无法处理大量的并发数据请求
    3)数据丢失

  • 通过部署主从复制解决这一问题
    1) 增加Mysql数据库服务器,对数据进行备份,形成主备
    2)确保主备Mysql数据库服务器是一样的
    3)主服务器宕机了,备份服务器继续工作,数据有保障

Mysql支持的复制类型

  • 基于语句的复制。在主服务器上执行的SQL语句,在从服务器上执行同样的语句。(Mysql默认采用语句的复制,效率比较高)
  • 基于行的复制。把改变的内容复制过去,而不是把命令在从服务器执行一遍。
  • 混合类型的复制。默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制

主从复制的原理过程

  • 在每个事物更新数据完成之前,master在二进制日志记录这些改变。写入二进制日志完成后,master通知存储引擎提交事务
  • slave(从服务器)将master(主服务器)的Binary log 复制到中继日志,首先slave开始一个工作线程 I/O线程,I/O线程在master上开一个普通的连接,然后开始Binlog dump process,Binlog dump process从master的二进制日志中读取事件,如果已经更上master,它会睡眠并等待master产生新事件。I/O线程将这些日志写入中继日志
  • SQL slave thread(SQL从线程)处理该过程的最后一步,SQL线程从中继日志读取事件,并重放其它事件而更新slave数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。

部署主从复制

部署环境

  • maser 主服务器 ;ip :20.0.0.105/24
  • slave 从服务器 ;ip :20.0.0.106/24
  • slave 从服务器 ;ip :20.0.0.107/24

已关闭防火墙、核心防护、安装本地yum源、安装mysql数据库、安装ntp

设置master主服务器 20.0.0.105

1、设置时间同步(必须设置)

[root@localhost ~]# ntpdate ntp1.aliyun.com
20 Oct 16:41:19 ntpdate[15677]: the NTP socket is in use, exiting

2、修改主配置文件

[root@localhost ~]# vi /etc/my.cnf

   .......省略内容

[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
secure-file-priv=""
server-id = 11                ####修改主服务器的id号
log_bin = master-bin          ####添加master中生成二进制日志的语句
log-slave-updates = true         ####给从服务器授权同步,更新二进制日志文件

   ...........省略内容

[root@localhost ~]# systemctl restart mysqld          ###重启mysql

3、登录 mysql 数据库给从服务器授权

[root@localhost ~]# mysql -uroot -p
......省略内容

mysql> grant replication slave on *.* to 'myslave'@'20.0.0.%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.01 sec)
(允许20.0.0.%网段内的myslave 用户登录所有数据库、数据表)

mysql> flush privileges;          ####刷新,生成二进制日志文件
Query OK, 0 rows affected (0.00 sec)

mysql> show master status;       ####查看master的状态
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000013 |      751 |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

4、进入data目录下查看刷新出的二进制日志文件

[root@localhost ~]# ls /usr/local/mysql/data
auth            ib_logfile0        master-bin.000002  master-bin.000007  master-bin.000012   sys
auto.cnf        ib_logfile1        master-bin.000003  master-bin.000008  master-bin.000013   test
bbs             ibtmp1             master-bin.000004  master-bin.000009  master-bin.index
ib_buffer_pool  kfc                master-bin.000005  master-bin.000010  mysql
ibdata1         master-bin.000001  master-bin.000006  master-bin.000011  performance_schema

设置slave从服务器 20.0.0.106

1、设置时间同步(必须设置)

[root@localhost ~]# ntpdate ntp1.aliyun.com
20 Oct 16:41:28 ntpdate[46953]: the NTP socket is in use, exiting

2、修改主配置文件

[root@localhost ~]# vi /etc/my.cnf

   .......省略内容

[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 22            ####修改slave 的id号
relay-log = relay-log-bin            ###添加,开启中继日志
relay-log-index = slave-relay-bin.index         ####添加中继日志索引文件

   ...........省略内容

[root@localhost ~]# systemctl restart mysqld          ###重启mysql

3、登录 slave 中的数据库,配置同步

[root@localhost ~]# mysql -uroot -p
......省略内容

mysql> change master to master_host='20.0.0.105',master_user='myslave',master_password='123456',master_log_file='master-bin.000013',master_log_pos=751;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 20.0.0.105
                  Master_User: myslave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-bin.000013
          Read_Master_Log_Pos: 903
               Relay_Log_File: relay-log-bin.000002
                Relay_Log_Pos: 473
        Relay_Master_Log_File: master-bin.000013
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

                   ............省略内容

设置slave从服务器 20.0.0.107

1、设置时间同步(必须设置)

[root@localhost ~]# ntpdate ntp1.aliyun.com
20 Oct 16:41:32 ntpdate[46992]: the NTP socket is in use, exiting

2、修改主配置文件

[root@localhost ~]# vi /etc/my.cnf

   .......省略内容

[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 33            ####修改slave 的id号
relay-log = relay-log-bin            ###添加,开启中继日志
relay-log-index = slave-relay-bin.index         ####添加中继日志索引文件

   ...........省略内容

[root@localhost ~]# systemctl restart mysqld          ###重启mysql

3、登录 slave 中的数据库,配置同步

[root@localhost ~]# mysql -uroot -p
......省略内容

mysql> change master to master_host='20.0.0.105',master_user='myslave',master_password='123456',master_log_file='master-bin.000013',master_log_pos=751;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 20.0.0.105
                  Master_User: myslave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-bin.000013
          Read_Master_Log_Pos: 903
               Relay_Log_File: relay-log-bin.000002
                Relay_Log_Pos: 473
        Relay_Master_Log_File: master-bin.000013
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

                   ............省略内容

验证

1、在master主服务器上创建一个lookupme数据库
在这里插入图片描述
2、去slave从服务器验证有没有这个库

  • slave 20.0.0.106
    在这里插入图片描述
  • slave 20.0.0.107
    在这里插入图片描述
    验证都有这个数据库,证明部署主从复制成功。

---------------------------------------------------------------------到此结束。感谢浏览

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值