mysql 数据库主从同步配置

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

数据库配置主从同步

MYSQL主从同步架构是目前使用最多的数据库架构之一,尤其是负载比较大的网站,因此对于主从同步的管理也就显得非常重要,新手往往在出现主从同步错误的时候不知道如何入手,这篇文章就是根据自己的经验来详细叙述mysql主从的管理。

MYSQL主从同步的作用

(1) 数据分布
(2) 
负载平衡(load balancing)
(3) 
备份
(4) 
高可用性(high availability)和容错

MYSQL主从同步的原理

关于MYSQL的主从同步,最主要的是要了解MYSQL的主从同步是如何工作的也即主从同步的原理,通过下图能很明白的指导其工作的过程:

20639775_1340695881N7L6.jpg

大致描述一下过程:从服务器的IO线程从主服务器获取二进制日志,并在本地保存为中继日志,然后通过SQL线程来在从上执行中继日志中的内容,从而使从库和主库保持一致。主从同步的详细过程如下:

1. 主服务器验证连接。

2. 主服务器为从服务器开启一个线程。

3. 从服务器将主服务器日志的偏移位告诉主服务器。

4. 主服务器检查该值是否小于当前二进制日志偏移位。

5.  如果小于,则通知从服务器来取数据。

6.  从服务器持续从主服务器取数据,直至取完,这时,从服务器线程进入睡眠,主服务器线程同时进入睡眠。

7. 当主服务器有更新时,主服务器线程被激活,并将二进制日志推送给从服务器,并通知从服务器线程进入工作状态。

8. 从服务器SQL线程执行二进制日志,随后进入睡眠状态。


下面我们以两台服务器做实验:

 

主数据库:172.30.65.122

从数据库:172.30.65.124

 


一.配置mysql主数据库#172.30.65.122

mysql -u root -p#进入控制台


create database cesudb#建立数据库测速db


insert into mysql.user(Host,User,Password) values('localhost','cesuuser',password('123456'));#创建用户cesuuser,密码是123456


grant all on cesudb.* to 'cesuuser'@'172.30.65.169' identified by '123456' with grant option;#授予cesuuser的用户在nagios服务器172.30.65.169的机器上对cesudb的完全访问权限。


insert into mysql.user(Host,User,Password) values('localhost','cesudbbak',password('123456'));#创建mysql数据库主从同步用户cesudbbak,用户密码是123456。


grant replication slave on *.* to 'cesudbbak'@'172.30.65.124' identified by '123456' with grant option;#授权cesudbbak用户正能在172.30.65.124的机器上访问主数据库并只有备份的权限。


flush privileges;#刷新系统授权表


二.把Mysql主服务器172.30.65.122上的数据库 cesudb导入到Mysql从服务器172.30.65.124中


注意:在到处前可在控制台执行以下的命令


flush tables with read lock;#数据库只读锁定命令,防止到处数据库的时候有数据写入。


  1. 导出数据库cesudb


mysqldump -u root -p --default-character-set=utf8 --opt -Q -R --skip-lock-tables cesudb > /home/cesudbbak.sql#需要在主数据库服务器的shell>下操作,把数据库cesudb导出到/home目录下并重新命名为cesudbbak.sql。


unlock tables;#解除锁定,在mysql控制台执行


scp cesudbbak.sql root@172.30.65.124:/home#到/home目录下把该文件传到从数据库172.30.65.124的/home目录下。


2.进入从数据库#172.30.65.124

mysql -uroot -p


create database cesudb;#建立数据库cesudb


use cesudb;使用数据库cesudb


source /home/cesudbbak.sql#导入备份文件到数据库


mysql -u cesudbbak -h 172.30.65.122 -p#测试在从数据库服务器172.30.65.124上登陆数据库主服务器172.30.65.122。该命令的执行要在shell>下面。


三.配置主数据库服务器172.30.65.122的my.cnf文件。


vim /etc/my.cnf#这里的本机的mysql是yum安装的,如果你是编译安装的需另行找到主配置文件并修改。

把该目录下的文件改为以下就可以了。

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
server-id=1#需添加的行,该行制定为1表示主服务器
log-bin=mysql-bin#需添加的行,启动mysql二进制日志系统
binlog-do-db=cesudb#需添加的行,需要同步的数据库名,如有多个数据库可以重复添加此行
binlog-ignore-db=mysql#需添加的行,不同步mysql系统数据库

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid


service mysqld restart#重启mysql服务


mysql -u root -p#进入mysql控制台


show variables like 'server_id';#查看server_id的值是否为1

mysql> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 1     |
+---------------+-------+
1 row in set (0.00 sec)


show master status#查看主服务器信息,出现以下类似的信息


mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000006 |      106 | cesudb       | mysql            |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)


注意:这里记住上面的File和Position的值,后面还会用到。


四.配置从数据库的my.cnf文件#172.30.65.124


vim /etc/my.cnf

修改为以下内容即可,该机器上的从数据库也是yum安装的,如自己机器上的数据库是编译安装的可以另行制定配置文件位置

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
server-id=2#需添加的行,设置其值等于2,表示是从数据库
log-bin=mysql-bin#启动mysql二进制日志系统
replicate-do-db=cesudb#需要同步的数据库名,如果有多个数据库可以重复此参数,每个数据库一行
replicate-ignore-db=mysql#不同步mysql系统数据库
#bind-address=172.30.65.124

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid


service mysqld restart#重启数据库


mysql -u root -p#进入mysql控制台


show variables like 'server_id';#看到id为2,表示正常

mysql> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 2     |
+---------------+-------+
1 row in set (0.00 sec)


 slave stop;#停止slave同步进程


change master to master_host='172.30.65.122',master_user='cesudbbak',master_password='123456',master_log_file='mysql-bin.000006',master_log_pos=106;#执行同步语句,master_log_file和master_log_pos就是上面提到的那连个值

mysql> change master to master_host='172.30.65.122',master_user='cesudbbak',master_password='123456',master_log_file='mysql-bin.000006',master_log_pos=106;
Query OK, 0 rows affected (0.02 sec)


slave start;#开启slave同步进程


SHOW SLAVE STATUS\G#查看同步信息,会出现以下的同步信息

mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.30.65.122
                  Master_User: cesudbbak
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000006
          Read_Master_Log_Pos: 106
               Relay_Log_File: mysqld-relay-bin.000002
                Relay_Log_Pos: 251
        Relay_Master_Log_File: mysql-bin.000006
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

              Replicate_Do_DB: cesudb
          Replicate_Ignore_DB: mysql
           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: 106
              Relay_Log_Space: 407
              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: 
1 row in set (0.00 sec)

注意出现红色字体的部分,以上的连个参数出现yes代表配置成功。


五.测试主从配置


1.在主数据库上建立一个表student#172.30.65.122

mysql -u root -p


use cesudb;


create table ...#建一个测试表

mysql> create table student (
    -> id int,
    -> name char(10),
    -> sex char(2));
Query OK, 0 rows affected (0.02 sec)

mysql> show tables;
+------------------+
| Tables_in_cesudb |
+------------------+
| student          |
+------------------+
1 row in set (0.00 sec)



2.登录从数据库查看该表#172.30.65.124


mysql> use cesudb
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+------------------+
| Tables_in_cesudb |
+------------------+
| student          |
+------------------+
1 row in set (0.00 sec)


已经自动同步过来,说明同步成功。

本文转自服务器运维博客51CTO博客,原文链接http://blog.51cto.com/shamereedwine/1749192如需转载请自行联系原作者

neijiade10000
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
90
分享
相关文章
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
docker拉取MySQL后数据库连接失败解决方案
通过以上方法,可以解决Docker中拉取MySQL镜像后数据库连接失败的常见问题。关键步骤包括确保容器正确启动、配置正确的环境变量、合理设置网络和权限,以及检查主机防火墙设置等。通过逐步排查,可以快速定位并解决连接问题,确保MySQL服务的正常使用。
150 82
seatunnel配置mysql2hive
本文介绍了SeaTunnel的安装与使用教程,涵盖从安装、配置到数据同步的全过程。主要内容包括: 1. **SeaTunnel安装**:详细描述了下载、解压及配置连接器等步骤。 2. **模拟数据到Hive (fake2hive)**:通过编辑测试脚本,将模拟数据写入Hive表。 3. **MySQL到控制台 (mysql2console)**:创建配置文件并执行命令,将MySQL数据输出到控制台。 4. **MySQL到Hive (mysql2hive)**:创建Hive表,配置并启动同步任务,支持单表和多表同步。
124 15
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
221 42
MySQL生产环境迁移至YashanDB数据库深度体验
这篇文章是作者将 MySQL 生产环境迁移至 YashanDB 数据库的深度体验。介绍了 YashanDB 迁移平台 YMP 的产品相关信息、安装步骤、迁移中遇到的各种兼容问题及解决方案,最后总结了迁移体验,包括工具部署和操作特点,也指出功能有优化空间及暂不支持的部分,期待其不断优化。
如何排查和解决PHP连接数据库MYSQL失败写锁的问题
通过本文的介绍,您可以系统地了解如何排查和解决PHP连接MySQL数据库失败及写锁问题。通过检查配置、确保服务启动、调整防火墙设置和用户权限,以及识别和解决长时间运行的事务和死锁问题,可以有效地保障应用的稳定运行。
165 25
MySQL原理简介—12.MySQL主从同步
本文介绍了四种为MySQL搭建主从复制架构的方法:异步复制、半同步复制、GTID复制和并行复制。异步复制通过配置主库和从库实现简单的主从架构,但存在数据丢失风险;半同步复制确保日志复制到从库后再提交事务,提高了数据安全性;GTID复制简化了配置过程,增强了复制的可靠性和管理性;并行复制通过多线程技术降低主从同步延迟,保证数据一致性。此外,还讨论了如何使用工具监控主从延迟及应对策略,如强制读主库以确保即时读取最新数据。
MySQL原理简介—12.MySQL主从同步
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等