mysql主从复制配置

硅谷探秘者 Md 数据库,mysql 826 0 0

主从复制的基本原理

  • (1)master服务器将数据的改变记录二进制binlog日志,当master上的数据发生改变时,则将其改变写入二进制日志中;
  • (2)slave服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/OThread请求master二进制事件
  • (3)同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中,从节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,使得其数据和主节点的保持一致,最后I/OThread和SQLThread将进入睡眠状态,等待下一次被唤醒。

也就是说:

  • 从库会生成两个线程,一个I/O线程,一个SQL线程;
  • I/O线程会去请求主库的binlog,并将得到的binlog写到本地的relay-log(中继日志)文件中;
  • 主库会生成一个log dump线程,用来给从库I/O线程传binlog;
  • SQL线程,会读取relay log文件中的日志,并解析成sql语句逐一执行;

基本原则

  • 每个slave只有一个master
  • 每个slave只能有一个唯一的服务器ID
  • 每个master可以有多个slave

配置

mysql版本要求一致且后台以服务运行。

主从都配置在[mysqld]结点下,都是小写

主服务器配置

修改my.cnf配置文件vi /etc/my.cnf,添加如下配置项:

#主服务器唯一Id[必填]
server-id=1
#启用二进制日志[必填]
log-bin=mysql-bin
#主机,读写都可以
read-only=0
#设置不要复制的数据库[可选]
#binlog-ignore-db=mysql
#设置需要复制的数据库[可选](输数据库名字)可以设置多个  
binlog-do-db=test

重启数据服务 service mysqld restart

登陆MySQL数据库设置允许从库获得主库日志

mysql -u root -p
#给从库放权限 
mysql>GRANT FILE ON *.* TO 'root'@'192.168.52.74' IDENTIFIED BY 'root password'; #创建用户 
mysql>GRANT REPLICATION SLAVE ON *.* TO 'root'@'192.168.52.74' IDENTIFIED BY 'root password'; #修改用户权限 
mysql>select host , user from mysql.user; #查看是否修改成功 
mysql>FLUSH PRIVILEGES; #刷新权限

重启MySQL服务,登录MySQL,查看主库信息:

[root@localhost ~]# service mysqld restart #重启mysql服务 
[root@localhost ~]# mysql -u root -p #登陆mysql 
mysql> show master status; #查看master状态

显示内容如下:

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |      154 | test         |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

从服务器配置

修改my.cnf配置文件vi /etc/my.cnf,添加如下配置项:

#主从复制配置
#从服务器唯一Id
server-id=2
#只读,对拥有super权限的账号是不生效的
read_only = 1

重启MySQL服务,登录MySQL

[root@localhost ~]# service mysql restart  
Shutting down MySQL.. SUCCESS! 
Starting MySQL. SUCCESS! 
[root@localhost ~]# mysql -u root -p

修改配置

mysql> stop slave; // 关闭Slave 
mysql> change master to master_host='192.168.52.75',master_user='root',master_password='123456',master_log_file='mysql-bin.000002', master_log_pos=154; // 设置连接主库信息 
mysql> start slave; //开启Slave

完整sql

mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> change master to master_host='192.168.52.75',master_user='root',master_password='123456',master_log_file='mysql-bin.000002', master_log_pos=154;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

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

上面的master_log_file是在配置Master的时候的File字段, master_log_pos是在配置MasterPosition 字段。一定要一一对应

查看从库信息 show slave status \G;

mysql> show slave status \G; 
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.52.75
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 154
               Relay_Log_File: localhost-relay-bin.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 154
              Relay_Log_Space: 531
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
                  Master_UUID: 2c6a4500-2b69-11ed-ac16-000c293fff2e
             Master_Info_File: /usr/local/mysql/data/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)

ERROR: 
No query specified

mysql基本的主从复制就配置好了,此时在主服务器创建表修改数据等,就会同步到从服务器


评论区
请写下您的评论...
暂无评论...
猜你喜欢
数据库 1196 开启和设二进日志日志切换二进日志相关参数二进日志恢数据库上一篇文章介绍了普通查询日志和慢查询日志等参考:mysql日志分析,本篇要介绍二进日志。一、什么是二进日志  二进日志要记
linux 919 假如服务器A,B都有ssh服务,现在在A服务器中。一、A到B(推过去)scp-rp/path/filenameusername@remoteIP:/path二、B到A(拉过来)scp-rpusername@remoteIP:/path/filename/path
maven 409 build plugins plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-shade-plugin/artifactId version3.2.4/version!--使用最新版本-- executions execution phasepackage/phase goals goalshade/goal /goals
weblog 990 ALTERTABLEdatabaseName.tableNameADDUNIQUE(columnName);databaseName:数据库名tableName:表明columnName:字段名
工具 1439 安装命令yum-yinstallgit查看版本git--version远程ssh,执行:gitconfig--globaluser.name"yourname"gitconfig
official 1211   首先maven,参考:https://packages.aliyun.com/maven   在项目中添加如下 distributionManagement repository
redis 734 介绍  单机版的Redis存在性能瓶颈,Redis通过提高实现读写分离,提高了了Redis的可用性,另一方便也能实现数据在多个Redis直接的备份。  通过Redis的可以提
official 546 网页的表格转markdown表格importjava.io.BufferedReader;importjava.io.File;importjava.io.FileReader
归档
2018-11  12 2018-12  33 2019-01  28 2019-02  28 2019-03  32 2019-04  27 2019-05  33 2019-06  6 2019-07  12 2019-08  12 2019-09  21 2019-10  8 2019-11  15 2019-12  25 2020-01  9 2020-02  5 2020-03  16 2020-04  4 2020-06  1 2020-07  7 2020-08  13 2020-09  9 2020-10  5 2020-12  3 2021-01  1 2021-02  5 2021-03  7 2021-04  4 2021-05  4 2021-06  1 2021-07  7 2021-08  2 2021-09  8 2021-10  9 2021-11  16 2021-12  14 2022-01  7 2022-05  1 2022-08  3 2022-09  2 2022-10  2 2022-12  5 2023-01  3 2023-02  1 2023-03  4 2023-04  2 2023-06  3 2023-07  4 2023-08  1 2023-10  1 2024-02  1 2024-03  1 2024-04  1
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议 无聊的知识 jenkins springboot mqtt协议 keepalived minio mysql ensp 网络基础 xxl-job rabbitmq haproxy srs 音视频 webrtc javascript
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。