生产环境 MySQL主从复制(同步)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介:

服务器信息

1、主服务器信息

solin@mysql-master:~$ lsb_release -a

No LSB modules are available.

Distributor ID:  Ubuntu

Description:     Ubuntu 14.04.4 LTS

Release:   14.04

Codename:  trusty

solin@mysql-master:~$ mysql -V

mysql  Ver 14.14 Distrib 5.5.50, for debian-linux-gnu (x86_64) using readline 6.3

solin@mysql-master:~$ ip ro li

default via 192.168.119.1 dev eth0

192.168.119.0/24 dev eth0  proto kernel  scope linksrc 192.168.119.95 

spacer.gif

2、从服务器信息

solin@mysql-slave:~$ lsb_release -a

No LSB modules are available.

Distributor ID:  Ubuntu

Description:     Ubuntu 14.04.4 LTS

Release:   14.04

Codename:  trusty

solin@mysql-slave:~$ mysql -V

mysql  Ver 14.14 Distrib 5.5.47, for debian-linux-gnu (x86_64) using readline 6.3

solin@mysql-slave:~$ ip ro ls

default via 192.168.119.1 dev eth0

192.168.119.0/24 dev eth0  proto kernel  scope linksrc 192.168.119.137

spacer.gif

MySQL从复制示意图

spacer.gif

 

Master主服务器配置

1、修改my.cnf配置文件

vi /etc/mysql/my.cnf

在[mysqld]中添加:

bind-address            =  0.0.0.0

server-id              = 1

log_bin                        = /var/log/mysql/mysql-bin.log

binlog_do_db           = include_database_name

binlog_ignore_db       = include_database_name

 

注:

server-id 服务器唯一标识;

log_bin 启动MySQL二进制日志;

binlog_do_db 指定记录二进制日志的数据库;

binlog_ignore_db 指定不记录二进制日志的数据库。

spacer.gif

2、查看log_bin是否生效

root@mysql-master:~# mysql -uroot -p -e "show variables like 'log_bin';"

Enter password:

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

| Variable_name | Value |

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

| log_bin       | ON    |

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

spacer.gif

3、登陆主服务器MySQL创建从服务器用到的账户和权限

mysql> grant replication slave on *.* to 'rep'@'192.168.119.137' identified by 'ubuntu';

Query OK, 0 rows affected (0.01 sec)

mysql> grant replication slave on *.* to 'masterbackup' @' 192.168.119.137' identified by 'masterbackup';

 

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

spacer.gif

4、重启mysql

root@mysql-master:~# /etc/init.d/mysql restart

spacer.gif

5、主库上做备份

锁定数据库

mysql> flush table with read lock;

Query OK, 0 rows affected (0.01 sec)

 

mysql> show master status;

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

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| mysql-bin.000007 |      107 |              |                  |

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

1 row in set (0.01 sec)

 

mysql> show master logs;

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

| Log_name         | File_size |

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

| mysql-bin.000001 |       126 |

| mysql-bin.000002 |       126 |

| mysql-bin.000003 |       126 |

| mysql-bin.000004 |       126 |

| mysql-bin.000005 |       126 |

| mysql-bin.000006 |       126 |

| mysql-bin.000007 |       107 |

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

7 rows in set (0.00 sec)

 

mysql>

spacer.gif

 

这个窗口保持不变,重新打开一个终端

solin@mysql-master:~$ sudo su -

[sudo] password for solin:

root@mysql-master:~# mysqldump -uroot -p -A -B --events --master-data=2  >/opt/rep.sql

Enter password:

root@mysql-master:~# ls -l /opt/

总用量 4596

-rw-r--r-- 1 root root 4705979  9月  1 17:25 rep.sql

spacer.gif

 

备份成功,回到刚才终端,解锁数据库

mysql> unlock tables;

Query OK, 0 rows affected (0.00 sec)

 

mysql> show master status;

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

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| mysql-bin.000007 |      107 |              |                  |

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

1 row in set (0.00 sec)

 

mysql> show master logs;

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

| Log_name         | File_size |

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

| mysql-bin.000001 |       126 |

| mysql-bin.000002 |       126 |

| mysql-bin.000003 |       126 |

| mysql-bin.000004 |       126 |

| mysql-bin.000005 |       126 |

| mysql-bin.000006 |       126 |

| mysql-bin.000007 |       107 |

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

7 rows in set (0.00 sec)

spacer.gif

授权运程登陆

vi /etc/mysql/my.cnf

bind-address = 0.0.0.0

登陆MySQL数据库

grant all privileges on *.* to root@"192.168.119.%" identified by "ubuntu" with grant option;

spacer.gif

6、把主库的备份迁移到从库(从服务器可以远程连接)

root@mysql-master:~# mysql -uroot -h192.168.119.137 -p </opt/rep.sql

spacer.gif

 

Slave服务器配置

1、修改my.cnf配置文件

vi /etc/mysql/my.cnf

bind-address = 0.0.0.0

server-id               = 2

spacer.gif

2、授权数据库运程连接

登陆MySQL数据库

mysql> grant all privileges on *.* to root@"%" identified by "ubuntu" with grant option;

Query OK, 0 rows affected (0.01 sec)

 

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

spacer.gif

注:把主库的备份迁移到从库可以在此授权之后做

 

3、从库设置,登录Slave从服务器,连接Master主服务器:

mysql> CHANGE MASTER TO

    -> MASTER_HOST='192.168.119.95',

    -> MASTER_PORT=3306,

    -> MASTER_USER='rep',

    -> MASTER_PASSWORD='ubuntu',

    -> MASTER_LOG_FILE='mysql-bin.000007',

-> MASTER_LOG_POS=107;

注:

master_host对应主服务器的IP地址:192.168.119.95;

master_port对应主服务器的端口: 3306;

master_log_file对应show master status显示的File列:mysql-bin.000007;

master_log_pos对应Position列:107

spacer.gif

4、启动slave数据同步

mysql> start slave;

Query OK, 0 rows affected (0.00 sec)

spacer.gif


查看Slave信息

1、show slave status\G

mysql> show slave status\G

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

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 192.168.119.95

                  Master_User: rep

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: mysql-bin.000008

          Read_Master_Log_Pos: 107

               Relay_Log_File: mysqld-relay-bin.000003

                Relay_Log_Pos: 253

        Relay_Master_Log_File: mysql-bin.000008

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

              Relay_Log_Space: 711

              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

1 row in set (0.00 sec)

spacer.gif

注:Slave_IO_RunningSlave_SQL_Running都为yes才表示同步成功。










本文转自 运维小当家 51CTO博客,原文链接:http://blog.51cto.com/solin/1879642,如需转载请自行联系原作者
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
11月前
|
安全 关系型数据库 MySQL
如何将数据从MySQL同步到其他系统
【10月更文挑战第17天】如何将数据从MySQL同步到其他系统
1519 0
|
6月前
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
|
11月前
|
SQL 关系型数据库 MySQL
mysql主从复制概述和配置
【10月更文挑战第22天】MySQL 主从复制是一种将主服务器的数据复制到一个或多个从服务器的技术,实现读写分离,提高系统性能和可用性。主服务器记录变更日志,从服务器通过 I/O 和 SQL 线程读取并应用这些变更。适用于读写分离、数据备份和恢复、数据分析等场景。配置步骤包括修改配置文件、创建复制用户、配置从服务器连接主服务器并启动复制进程。
357 1
|
11月前
|
监控 关系型数据库 MySQL
深入了解MySQL主从复制:构建高效稳定的数据同步架构
深入了解MySQL主从复制:构建高效稳定的数据同步架构
306 1
|
7月前
|
SQL 网络协议 关系型数据库
MySQL 主从复制
主从复制是 MySQL 实现数据冗余和高可用性的关键技术。主库通过 binlog 记录操作,从库异步获取并回放这些日志,确保数据一致性。搭建主从复制需满足:多个数据库实例、主库开启 binlog、不同 server_id、创建复制用户、从库恢复主库数据、配置复制信息并开启复制线程。通过 `change master to` 和 `start slave` 命令启动复制,使用 `show slave status` 检查同步状态。常见问题包括 IO 和 SQL 线程故障,可通过重置和重新配置解决。延时原因涉及主库写入延迟、DUMP 线程性能及从库 SQL 线程串行执行等,需优化配置或启用并行处理
205 40
|
7月前
|
关系型数据库 MySQL 数据库
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
随着数据量增长和业务扩展,单个数据库难以满足需求,需调整为集群模式以实现负载均衡和读写分离。MySQL主从复制是常见的高可用架构,通过binlog日志同步数据,确保主从数据一致性。本文详细介绍MySQL主从复制原理及配置步骤,包括一主二从集群的搭建过程,帮助读者实现稳定可靠的数据库高可用架构。
402 9
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
|
6月前
|
SQL 关系型数据库 MySQL
MySQL生产环境迁移至YashanDB数据库深度体验
这篇文章是作者将 MySQL 生产环境迁移至 YashanDB 数据库的深度体验。介绍了 YashanDB 迁移平台 YMP 的产品相关信息、安装步骤、迁移中遇到的各种兼容问题及解决方案,最后总结了迁移体验,包括工具部署和操作特点,也指出功能有优化空间及暂不支持的部分,期待其不断优化。
|
7月前
|
SQL 存储 关系型数据库
MySQL主从复制 —— 作用、原理、数据一致性,异步复制、半同步复制、组复制
MySQL主从复制 作用、原理—主库线程、I/O线程、SQL线程;主从同步要求,主从延迟原因及解决方案;数据一致性,异步复制、半同步复制、组复制
665 11
|
9月前
|
关系型数据库 MySQL 数据库
docker高级篇(大厂进阶):安装mysql主从复制
docker高级篇(大厂进阶):安装mysql主从复制
207 24
|
9月前
|
NoSQL 关系型数据库 Redis
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
239 14

推荐镜像

更多