mysql主从复制

实现mysql主从复制

主从复制(也称 AB 复制)允许将来自一个MySQL数据库服务器(主服务器)的数据复制到一个或多个MySQL数据库服务器(从服务器)
MySQL中复制的优点包括:

1、横向扩展解决方案 - 在多个从站之间分配负载以提高性能。在此环境中,所有写入和更新都必须在主服务器上进行。但是,读取可以在一个或多个从设备上进行。该模型可以提高写入性能(因为主设备专用于更新),同时显着提高了越来越多的从设备的读取速度。
2、数据安全性 - 因为数据被复制到从站,并且从站可以暂停复制过程,所以可以在从站上运行备份服务而不会破坏相应的主数据。
3、分析 - 可以在主服务器上创建实时数据,而信息分析可以在从服务器上进行,而不会影响主服务器的性能。
4、远程数据分发 - 您可以使用复制为远程站点创建数据的本地副本,而无需永久访问主服务器。

原理图

在这里插入图片描述

配置 Replication

配置步骤:

在主服务器上,您必须启用二进制日志记录并配置唯一的服务器ID。需要重启服务器。

编辑主服务器的配置文件 my.cnf,添加如下内容

   [mysqld]
   log-bin=/var/log/mysql/mysql-bin
   server-id=1

创建日志目录赋予权限,并修改主机名,进行本地解析
有些时候会搞不清在哪台服务器上进行解析,因此主从都配置本地解析

    mkdir /var/log/mysql
    chown mysql.mysql /var/log/mysql
    vi /etc/hosts
    ip   mysql-slave1
    保存退出

关闭selinux,防火墙

    setenforce 0
    systemctl stop firewalld

重启服务

    systemctl restart mysqld

注意:
如果省略server-id(或将其显式设置为默认值0),则主服务器拒绝来自从服务器的任何连接。

为了在使用带事务的InnoDB进行复制设置时尽可能提高持久性和一致性,
您应该在master my.cnf文件中使用以下配置项:

 innodb_flush_log_at_trx_commit = 1
 sync_binlog = 1

确保未在复制主服务器上启用skip-networking选项。
如果已禁用网络,则从站无法与主站通信,并且复制失败。

应该创建一个专门用于复制数据的用户

每个从站使用MySQL用户名和密码连接到主站,因此主站上必须有用户帐户,从站可以使用该帐户进行连接。
master 上的任何账户都可以用于复制的操作,前提是必须先被授权。
创建一个仅具有复制过程权限的单独帐户,以最大程度地降低对其他帐户的危害。

例如,要使用新用户 repl 可以从任何主机上连接到 master 上进行复制操作, 并且用户 repl 仅可以使用复制的权限。
在 master 上执行如下操作

 CREATE USER 'repl'@'%' IDENTIFIED BY '123';
 GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

mysql>

在从服务器上进行本地解析,使用刚才的用户进行测试连接

    vi /etc/hosts
    ip   mysql-master1
    保存退出
    mysql -urepl -p'123' -hmysql-master1
下面的操作根据如下情况继续
主服务器中有数据

如果在启动复制之前有现有数据需要与从属设备同步,请保持客户端正常运行,以便锁定保持不变。这可以防止进行任何进一步的更改,以便复制到从站的数据与主站同步。

在主服务器中导出先有的数据

如果主数据库包含现有数据,则必须将此数据复制到每个从站。有多种方法可以实现:
要选择转储数据库的适当方法,请在以下选项之间进行选择:

使用mysqldump工具创建要复制的所有数据库的转储。这是推荐的方法,尤其是在使用时 InnoDB。

如果数据库存储在二进制可移植文件中,则可以将原始数据文件复制到从属数据库。这比使用mysqldump并在每个slave上导入文件更有效,因为它会INSERT在重放语句时省略更新索引的开销 。InnoDB 不建议这样做。

    mysqldump  -uroot  -p密码  --all-databases  --master-data=1 > dbdump.db

这里的用户是本机服务器的用户

从主服务器中使用 scp 或 rsync 等工具,把备份出来的数据传输到从服务器中。

在主服务中执行如下命令

   scp  dbdump.db root@mysql-slave1:/root/

这里的 mysql-slave1 需要能在主服务器中 ping 通。

配置从服务器,并重启
在从服务器上编辑其配置文件 my.cnf 并添加如下内容:

// my.cnf 文件

 [mysqld]
 server-id=2

导入数据到从服务器,并配置连接到主服务器的相关信息

在从服务器上操作
方式一:
导入数据

 mysql  -uroot -p    < /root/fulldb.dump

在从服务器上配置连接到主服务器的相关信息
进入从服务执行如下操作:

mysql> CHANGE MASTER TO
MASTER_HOST='mysql-master1',
MASTER_USER='repl',
MASTER_PASSWORD='123',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;

注意上面的 mysql-bin.000001 是你 mysqldump 后的备份文件中出现的文件名。
而 154 也是需要参照 mysqldump 文件中的内容。
比如:

cat  /root/fulldb.dump
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=154;

启动从服务器的复制线程以开始复制

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

检查是否成功
在从服务上执行如下操作

 mysql> show slave status\G

完结

作者:alvenhhh
来源:csdn
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

linux狂热粉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值