mysql主从复制配置

硅谷探秘者 数据库,mysql 59 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基本的主从复制就配置好了,此时在主服务器创建表修改数据等,就会同步到从服务器

猜你喜欢
数据库 443 开启和设二进日志日志切换二进日志相关参数二进日志恢数据库上一篇文章介绍了普通查询日志和慢查询日志等参考:mysql日志分析,本篇要介绍二进日志。一、什么是二进日志  二进日志要记
linux 314 假如服务器A,B都有ssh服务,现在在A服务器中。一、A到B(推过去)scp-rp/path/filenameusername@remoteIP:/path二、B到A(拉过来)scp-rpusername@remoteIP:/path/filename/path
weblog 463 ALTERTABLEdatabaseName.tableNameADDUNIQUE(columnName);databaseName:数据库名tableName:表明columnName:字段名
工具 853 安装命令yum-yinstallgit查看版本git--version远程ssh,执行:gitconfig--globaluser.name"yourname"gitconfig
official 133   首先maven,参考:https://packages.aliyun.com/maven   在项目中添加如下 distributionManagement repository
official 157 网页的表格转markdown表格importjava.io.BufferedReader;importjava.io.File;importjava.io.FileReader
框架 3057 #当中需要内存大小时,可以使用1k,5GB,4M等类似的格式,其转换方式如下(不区分大小写)##1k=1000bytes#1kb=1024bytes#1m=1000000bytes#1mb
框架 1981 日志log4j.properties1.完整示例:##屏蔽com.mchange.v2包下面的debug,info,warn信息##log4j.logger.xxx=error意为屏蔽xxx包下
归档
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
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议 无聊的知识 jenkins springboot mqtt协议 keepalived minio mysql ensp 网络基础
目录
余生别太较劲,放过自己 才会幸福。