linux mysql5.7.33 主从数据库同步

一、环境准备

机器IP 机器说明

192.168.148.128 用作master

192.168.148.129 用作slave

注意:

1.关闭防火墙和selinux;

#关闭防火墙

systemctl stop firewalld

#开机禁用防火墙

systemctl disable firewalld

#临时关闭selinux

setenforce 0


二、修改master配置/etc/my.cnf

[mysqld]

#数据目录定义

datadir=/var/lib/mysql

#socket文件定义

socket=/var/lib/mysql/mysql.sock

#错误日志定义

log-error=/var/log/mysqld.log

#进程文件定义

pid-file=/var/run/mysqld/mysqld.pid

#跳过密码验证(非必选)

#skip-grant-tables

#开启binlog二进制日志

log-bin=mysql-bin

#中继日志

relay_log=mysql-relay-bin

#设置server_id,具有唯一性

server-id=1

#跳dns过解析,是客户端连接服务端接速度加快

skip-name-resolve

#每次写入binlog的操作都写入到磁盘

sync_binlog=1

#最大连接数

max_connections=200

#二进制日志自动删除/过期的天数。默认值为0,nlog的操作都写入到磁盘

sync_binlog=1

#二进制日志自动删除/过期的天数。默认值为0,表示不自动删除

expire_logs_days=7


三、修改slave配置/etc/my.cnf

[mysqld]

#数据目录定义

datadir=/var/lib/mysql

#socket文件定义

socket=/var/lib/mysql/mysql.sock

#错误日志定义

log-error=/var/log/mysqld.log

#进程文件定义

pid-file=/var/run/mysqld/mysqld.pid

#跳过密码验证

#skip-grant-tables

#开启binlog二进制日志

log-bin=mysql-bin

#中继日志

relay_log=mysql-relay-bin

#设置server_id,具有唯一性

server-id=2

#跳dns过解析,是客户端连接服务端接速度加快

skip-name-resolve

#每次写入binlog的操作都写入到磁盘

sync_binlog=1

#最大连接数

max_connections=200

#二进制日志自动删除/过期的天数。默认值为0,nlog的操作都写入到磁盘

sync_binlog=1

#二进制日志自动删除/过期的天数。默认值为0,表示不自动删除

expire_logs_days=7


四、分别重启两台mysql

#systemctl restart mysqld

1

五、在master新增复制用户并授权

新增复制用户slave并授权

在从数据库新增slave用户

#新增用户 slave 允许从ip为192.168.148.129的机器,通过密码Zdkx#2021来访问


mysql> grant replication slave,replication client on *.* to 'slave'@'192.168.148.129' identified by 'Zdkx#2021';

#刷新使其生效;

mysql> FLUSH PRIVILEGES;


查看master状态

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+

| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000007 |      154 |              |                  |                  |

+------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

# 记住文件名 mysql-bin.000007和 Position 154;

后面在从库链接主库时需要

六、在slave上添加主库信息

添加主库信息

# 先停止以下,避免会出错;

mysql> stop slave;

Query OK, 0 rows affected (0.00 sec)

# 设置master服务器的一些参数 参数说明看下面的解释

mysql> change master to master_host='192.168.148.128', master_user='slave', master_password='pwd.slave', master_port=3306, master_log_file='mysql-bin.000007', master_log_pos=154, master_connect_retry=30;

Query OK, 0 rows affected, 2 warnings (0.01 sec)

#说明

master_host='192.168.148.128' # Master的IP地址

master_user='slave' # 用于同步数据的用户(在Master中授权的用户)

master_password='Zdkx#2021' # 同步数据用户的密码

master_port=3306 # Master数据库服务的端口

master_log_file='mysql-bin.000007' #指定Slave从哪个日志文件开始读复制数据(可在Master上使用show master status查看到日志文件名)

master_log_pos=154 # 从哪个POSITION号开始读

master_connect_retry=30 #当重新建立主从连接时,如果连接建立失败,间隔多久后重试。单位为秒,默认设置为60秒,同步延迟调优参数。

#开启从库

mysql> start slave;

如果启动失败,可以reset slave 之后再 start slave

Query OK, 0 rows affected (0.00 sec)

# 查看slave status

mysql> show slave status\G;

*************************** 1. row ***************************

              Slave_IO_State: Waiting for master to send event

                  Master_Host: 192.168.148.128

                  Master_User: slave

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: mysql-bin.000007

          Read_Master_Log_Pos: 154

              Relay_Log_File: mysql-relay-bin.000005

                Relay_Log_Pos: 367

        Relay_Master_Log_File: mysql-bin.000007

            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: 740

              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: 12afccf6-a283-11eb-9762-000c294fef43

            Master_Info_File: /var/lib/mysql/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)


七、测试MySQL的主从备份

测试就是在主库中进行DDL以及DML语句的执行,看从库是否会跟主库一样发生变化

在master创建数据

mysql> create database test01;

mysql> use test01;

mysql> CREATE TABLE `test01` (

    ->  `id` int(255) NOT NULL AUTO_INCREMENT,

    ->  `username` varchar(255) DEFAULT NULL,

    ->  PRIMARY KEY (`id`)

    -> ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

mysql> insert into test01  values(1,'zhangsan');

Query OK, 1 row affected (0.01 sec)

mysql> select * from test01;

+----+----------+

| id | username |

+----+----------+

|  1 | zhangsan |

+----+----------+

1 row in set (0.00 sec)


在slave上查看数据是否同步

mysql> show databases;

+--------------------+

| Database          |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| syh                |

| sys                |

| test01            |

+--------------------+

6 rows in set (0.00 sec)


mysql> use test01;

#有数据,说明同步成功

mysql> select * from test01;

±—±---------+

| id | username |

±—±---------+

| 1 | zhangsan |

±—±---------+

————————————————



脚本整理

主库 :create user 'slave'@'192.168.56.46' identified by '123456';

授权访问: grant replication slave on *.* to 'slave'@'192.168.56.46' identified by '123456';

备库上修改master:change master to master_host='192.168.57.98', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000002', master_log_pos=154, master_connect_retry=30;


开启从库:start slave

重置 reset slave

停止:stop slave

显示主库链接状态:show master status

             Slave_IO_Running: Yes  (说明成功)

            Slave_SQL_Running: Yes  (说明成功)

主库上修改东西:CREATE TABLE `test01` (`id` int(255) NOT NULL AUTO_INCREMENT,`username` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Mysql主从复制的实现原理图大致如下: MySQL之间数据复制的基础是以二进制日志文件(binary log f...
    linux筱筱阅读 384评论 0 1
  • mysql集群最近在参加项目开发微信小程序后台,由于用户数量巨大,且后台程序并不是很完美,所以对用户的体验很是不友...
    小七奇奇阅读 905评论 0 0
  • mysql配置主从数据库 MySQL的主从同步是一个很成熟的架构,优点为: ①在从服务器可以执行查询工作(即我们常...
    不惋惜阅读 539评论 0 2
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 126,220评论 2 7
  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 6,122评论 0 4