怎么设置 mysql 多主复制

时间:2022-08-28 23:11:40

更新

其实本文主要来自www.digitalocean.com ,但是我没有买他们家的 VPS 用来 demo 了.只是用vagrant 来模拟了.

介绍

说说关于通过两台 vps 来扩展 mysql. 之前我们说到了在2台 vps 直接通过nginx 来设置负载均衡, 你可以读读它

所谓 Mysql 的复制就是实时的把单一的数据集复制到另外一台服务器上. 这个配置称之为主从复制. 这是一个典型的操作配置. 我们接下来会有一个更加好的方案来实现. 以为多主(主-主)复制能够允许数据拷贝到的其他的服务器,这个大家都有,但是主要的不同在于能够提高单一服务器的读写性能. 这个设置会添加数据冗余,但是提高我们读取数据的性能.

假设我们下面的配置在2台 vps 上.我们称之为服务器 C 和服务器 D.

  • server c 3.3.3.3
  • server d 4.4.4.4

第一步, 安装和配置 mysql 在 c 机器上

首先,我们要安装mysql-server 和mysql-client 在服务器上,通过下面的命令来:

sudo apt-get install mysql-server mysql-client

mysql 默认只接受本地(127.0.0.1)的连接, 我们需要修改一些默认的配置来实现这个,我们需要修改/ etc/mysql/my.cnf 看到下面的内容:

#server-id              = 1
#log_bin = /var/log/mysql/mysql-bin.log
#binlog_do_db = include_database_name
bind-address = 127.0.0.1

第一行用来标示当前的服务器,在我们的这个mysql 复制的配置中,我们需要这个标示,我们把它注释取消.第二行说明当前的binlog目录. 第三行说明当前需要同步那个数据库. 当然你可以指定很多的数据库,但是这里我们就需要一个. 最后一行说明我们允许连接的客户端在哪里.我们不需要本地的连接.注释了.

server-id               = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = example
# bind-address = 127.0.0.1

重启服务器:

sudo service mysql restart

接下来,我们需要通过mysql 命令行来修改一些设置,

mysql -uroot -p

成功登陆之后,

mysql>

我们需要创建一个用户,用来复制数据, 我们给他叫replicator, 密码自取.

create user 'replicator'@'%' identified by 'password';

然后给他权限来复制数据.

grant replication slave on *.* to 'replicator'@'%';

这个用户不能够复制所有的库,它只能复制在配置文件中指定的数据库.

接下来,我们需要获取当前mysql server 的一些状态, 它会被用在之后的服务器 D 的设置上. 基本上就完成了本服务器的设置.

show master status;

它会输出下面的一些信息:

+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 107 | example | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

第二步,安装配置服务器 D

刚开始的步骤是一样的,就是按照 mysql 服务器和客户端, 然后修改配置文件:

/etc/mysql/my.cnf

这个时候,它和 c 服务器有点区别, 我们会把它改为下面的内容:

server-id              = 2
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = example
# bind-address = 127.0.0.1

之后重启服务器, 登录创建用户.

sudo service mysql restart
mysql -u root -p 
create user 'replicator'@'%' identified by 'password';

接下来,需要在 d 这里创建一个数据库example,那个你想要同步的数据库.

create database example;

接着给这个用户权限用来复制:

grant replication slave on *.* to 'replicator'@'%';

下面就是最关键的一步了. 通过我们在 c 服务器上获取的信息连通两台服务器.

还是在 D 服务器 mysqlclient 上,键入下面的命令:

slave stop;
change master to master_host = '3.3.3.3', master_user = 'replicator', master_password = 'password', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 107;
slave start; 这里关于`MASTER_LOG_FILE`和`MASTER_LOG_POS`,他们就是来自 c 服务器上 status 输出的信息. 现在 D 是挂到了 C 上,我们需要反过来把 C 也挂到 D 上,查看一下 D 的` master status`:

show master status

+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 | 107 | example | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

第三步,在 C 上完成复制

其实很上面的设置一样的,就是:

slave stop;
CHANGE MASTER TO MASTER_HOST = '4.4.4.4', MASTER_USER = 'replicator', MASTER_PASSWORD = 'password', MASTER_LOG_FILE = 'mysql-bin.000004', MASTER_LOG_POS = 107;
slave start;

注意修改你对应的 mysql 输出的信息,还有你的密码

上面的命令 mysql 会输出下面的类似信息:

Query OK, 0 rows affected (0.01 sec)

到这里,配置已经完成.

测试

我们这样,在 c 上创建一个表,然后在 d 上把它干掉,看看 c 上还有没有.

create database example;
create table example.dummy (id varchar(10)); #note here is ` not '

然后在 d 上看看有没有这个表:

show tables in example;

你会看到:

+-------------------+
| Tables_in_example |
+-------------------+
| dummy |
+-------------------+
1 row in set (0.00 sec)

然后在 d 上:

drop table dummy;

c 上:

show tables;

你会看到:

Empty set (0.00 sec)

see more

http://qiita.com/xiangzhuyuan/items/b366eb5463d7b56e1aaa

怎么设置 mysql 多主复制的更多相关文章

  1. 分布式数据存储 - MySQL双主复制

    上篇文章<分布式数据存储 - MySQL主从复制>,我们说到MySQL主从复制很好的保障了从库,读的高可用性.so,问题来了: 1.针对主库,写的高可用性又是如何做到高可用性? 2.如果需 ...

  2. MySQL双主复制

    原文发表于cu:2017-06-12 本文简单介绍MySQL双主复制原理及1个简单是双主复制验证. 一.MySQL双主复制原理 1. 双主复制原理 master-master复制的两台服务器,既是ma ...

  3. keepalived&plus;mysql双主复制高可用方案

    MySQL双主复制,即互为Master-Slave(只有一个Master提供写操作),可以实现数据库服务器的热备,但是一个Master宕机后不能实现动态切换.而Keepalived通过虚拟IP,实现了 ...

  4. 利用LVS&plus;Keepalived搭建Mysql双主复制高可用负载均衡环境

    应用背景: MySQL复制(主主,主从...)能在保证数据的备份的同时也能够做读写分离分摊系统压力,但是发生单点故障时,需要手动 切换到另外一台主机.LVS和Keppalived可以设定一个VIP来实 ...

  5. linux环境下配置mysql双主复制

    简单来说,双主复制就是让两台mysql服务器中的数据保持同步,可以用来实现灾备和负载均衡 主机1 IP:192.168.200.128 主机2 IP:192.168.200.131 两台主机系统均为c ...

  6. keeplived &plus; mysql双主复制部署 --原创

    环境: master 1: 192.168.100.10  oracle  linux 7.4  mysql 5.7.1 master 2: 192.168.100.11 oracle  linux ...

  7. mysql 双主复制 centos7

    mysql 安装请看:http://www.cnblogs.com/leohe/p/6839705.html 双主复制设置 1. 两台虚拟机,都是 centos7 主: 10.1.1.115 从: 1 ...

  8. mysql双主复制总结

    双主复制: 1).在两台服务器上各自建立一个具有复制权限的用户: 2).修改配置文件: # 主服务器A上 [mysqld] server-id = 10 log-bin = mysql-bin rel ...

  9. 配置mysql为主主复制步骤

    mysql版本:mysql-5.6.24-solaris10-sparc-64bit.tar 操作系统:solaris 11g u10 操作用户:使用非root进行操作安装,a路服务器ip地址为192 ...

随机推荐

  1. Git&lpar;最基本使用远程仓库&colon;github&rpar;-V1&period;0

    所有操作的根目录是:D:/zqzGit文件夹,这个目录也是git仓库 git bash清屏  clear  1.安装(略)  2.安装后记得配置: $ git config --global user ...

  2. EF实体框架之CodeFirst六

    上午的时候把复杂类型学习了一下,想着趁着周六日把Code First学习完,所以下午还是把Code First中的关系学习下.在数据库中最重要的恐怕就是E-R图了,E-R体现了表与表直接的关系.使用C ...

  3. 大小中型数据库和Oracle的常用命令

    一:大小中型数据库 二:基本命令 连接命令 1.conn[ect] 用法:conn 用户名/密码@网络服务器名[as sysdba/sysoper]当用特权用户身份连接时,必须带上as sysdba或 ...

  4. 线上应用故障排查之一:高CPU占用

    一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环. (友情提示:本博文章欢迎转载,但请注明出处:hankchen,http://www.blogjava.net/hank ...

  5. Django&plus;xadmin打造在线教育平台(九)

    目录 在线教育平台(一)      在线教育平台(二) 在线教育平台(三)      在线教育平台(四) 在线教育平台(五)      在线教育平台(六) 在线教育平台(七)      在线教育平台( ...

  6. 【sql server】&OpenCurlyDoubleQuote;因为数据库正在使用,所以无法获得对数据库的独占访问权” 解决方案汇总

    #事故现场: 在尝试还原数据库时,出现如下错误: #方案一:设置数据库在单用户模式下工作: 1.数据库上右键“属性”: 2.“选项”->“限制访问”,选择“SINGLE_USER” 3.还原数据 ...

  7. ubuntu&sol;debian 多版本gcc共存

    sudo add-apt-repository ppa:ubuntu-toolchain-r/test -ysudo apt-get update -ysudo apt-get install gcc ...

  8. Unable to open socket file&colon; target process not responding or HotSpot VM not loaded

    Unable to open socket file: target process not responding or HotSpot VM not loaded The -F option can ...

  9. Android Studio多Module开发需要注意的问题

    多module开发,其中的一个为入口module,其他module为独立的“应用”(library) 1.在原有的项目导入另外个项目的module为主项目的次module,即在A项目中添加一个启动B项 ...

  10. U2随笔

    Html 结构化 CSS 样式 JavaScript 行为交互 1.JavaScript基础 2.JavaScript操作BOM对象 3.JavaScript操作DOM对象***** 4.JavaSc ...