说明:mysql双主架构经过测试在生产环境中使用没有问题,但是还是建议使用读写分离,

Mysql主主同步环境部署:

centos 7.4

三台云主机:
mysql1 :10.1.1.142  
mysql2 :10.1.1.106
nginx: 10.1.1.152     外网地址:114.115.174.210

两台都安装mysql

1 . 安装新版mysql前,需将系统自带的mariadb-lib卸载

[root@slave mytmp]# rpm -qa|grep mariadb
mariadb-libs-5.5.44-2.el7.centos.x86_64
[root@slave mytmp]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7.centos.x86_64

2 . 解压安装mysql

这是为了演示,生产环境参照python一键安装lnmp篇。二进制安装mysql。生产环境不要用rpm包安装,会出问题,测试过

mysql官方网站:http://www.mysql.com

下载 tar -zxf mysql-5.7.16-1.el7.x86_64.rpm-bundle.tar

[root@slave mytmp]# tar -zxf mysql-5.7.16-1.el7.x86_64.rpm-bundle.tar
[root@slave mytmp]# ls
mysql-5.7.16-1.el7.x86_64.rpm-bundle.tar mysql-community-libs-5.7.16-1.el7.x86_64.rpm
mysql-community-client-5.7.16-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.16-1.el7.x86_64.rpm
mysql-community-common-5.7.16-1.el7.x86_64.rpm mysql-community-minimal-debuginfo-5.7.16-1.el7.x86_64.rpm
mysql-community-devel-5.7.16-1.el7.x86_64.rpm mysql-community-server-5.7.16-1.el7.x86_64.rpm
mysql-community-embedded-5.7.16-1.el7.x86_64.rpm mysql-community-server-minimal-5.7.16-1.el7.x86_64.rpm
mysql-community-embedded-compat-5.7.16-1.el7.x86_64.rpm mysql-community-test-5.7.16-1.el7.x86_64.rpm
mysql-community-embedded-devel-5.7.16-1.el7.x86_64.rpm

使用rpm -ivh命令依次进行安装

rpm -ivh mysql-community-common-5.7.16-1.el7.x86_64.rpm

rpm -ivh mysql-community-libs-5.7.16-1.el7.x86_64.rpm

rpm -ivh mysql-community-client-5.7.16-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.16-1.el7.x86_64.rpm

3 . 登录到mysql,更改root用户的密码

通过 cat ~/.mysql_secret 命令可以查看初始密码

[root@slave mytmp]# mysql -uroot -p
Enter password:

mysql> set password=password('1234');

4 . 创建用户,及作权限分配

mysql> CREATE USER 'zz'@'%' IDENTIFIED BY '1234';

mysql> GRANT ALL PRIVILEGES ON *.* TO 'zz'@'%';

mysql> FULSH PRIVILEGES;

5 . 远程登陆授权

mysql> grant all privileges on *.* to 'root'@'%' identified by 'j0!uN@Da12tA&*ba3S&e';

mysql> flush privileges;

6 . 设置mysql开机启动

开机启动
systemctl enable mysqld.service

mysql双主模式配置:

要实现互为主从,就必须 mster1-->master2设置主从同步 同时 master2--->master1 也设置主从同步

四、Mysql主主同步环境部署

---------mysql1服务器操作记录----------

在my.cnf文件的[mysqld]配置区域添加下面内容:
[root@master1 ~]# vim /usr/local/mysql/my.cnf
server-id = 1
log-bin = mysql-bin
sync_binlog = 1
binlog_checksum = none
binlog_format = mixed
auto-increment-increment = 2
auto-increment-offset = 1
slave-skip-errors = all

[root@master1 ~]# /etc/init.d/mysql restart
Shutting down MySQL. SUCCESS!
Starting MySQL.. SUCCESS!

创建一个复制用户
出了小问题,由于之前root用户的密码设置过于简单在创建复制用户时报如下错误

mysql> grant replication slave on *.* to 'root'@'10.1.1.%' identified by 'j0!uN@Da12tA&*ba3S&e';

mysql> alter user 'root'@'localhost' identified by 'j0!uN@Da12tA&*ba3S&e';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> grant replication slave on *.* to 'root'@'10.1.1.%' identified by 'j0!uN@Da12tA&*ba3S&e';

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

锁表,待同步配置完成在解锁

mysql> flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)
查看当前的binlog以及数据所在位置

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000006 | 996 | | | |
+------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

-------master2服务器操作记录-------

在my.cnf文件的[mysqld]配置区域添加下面内容:

[root@master2 ~]# vim /usr/local/mysql/my.cnf
server-id = 2
log-bin = mysql-bin
sync_binlog = 1
binlog_checksum = none
binlog_format = mixed
auto-increment-increment = 2
auto-increment-offset = 2
slave-skip-errors = all

[root@master2 ~]# /etc/init.d/mysql restart
Shutting down MySQL.. SUCCESS!
Starting MySQL.. SUCCESS!
mysql> grant replication slave on *.* to repl@'10.0.0.%' identified by '1qaz@WSX';
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
? mysql> flush tables with read lock;
? Query OK, 0 rows affected (0.00 sec)
查看 master情况
mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 150 | | | |
+------------------+----------+--------------+------------------+-------------------+

分别开启同步对方

---------------master1服务器做同步操作---------------
mysql> unlock tables; //先解锁,将对方数据同步到自己的数据库中
mysql> stop slave;
mysql> change master to master_host='10.1.1.142',master_user='root',master_password='j0!uN@Da12tA&*ba3S&e',master_log_file='mysql-bin.000002',master_log_pos=150;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
?
查看两个线程状态是否为YES?
mysql> show slave status \G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
-------------master2服务器做同步操作---------------
mysql> unlock tables; //先解锁,将对方数据同步到自己的数据库中
mysql> slave stop;
mysql> change master to master_host='10.1.1.106',master_user='root',master_password='j0!uN@Da12tA&*ba3S&e',master_log_file='mysql-bin.000002',master_log_pos=150;
Query OK, 0 rows affected, 2 warnings (0.06 sec)

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

mysql> show slave status \G;
Master_Log_File: mysql-bin.000006
Read_Master_Log_Pos: 996
Relay_Log_File: master2-relay-bin.000002
Relay_Log_Pos: 312
Relay_Master_Log_File: mysql-bin.000006
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

以上表明双方已经实现了mysql主主同步。

在master1数据库上写入新数据

mysql> unlock tables;

Query OK, 0 rows affected (0.00 sec)

mysql> create database test;
Query OK, 1 row affected (0.01 sec)

mysql> use test;
Database changed

mysql> create table if not exists kaifa ( id int(10) PRIMARY KEY AUTO_INCREMENT, name varchar(50) NOT NULL);?
Query OK, 0 rows affected (0.04 sec)
mysql> insert into kaifa values(2,'join');
Query OK, 1 row affected (0.00 sec)
mysql> insert into kaifa values(1,"bob");
Query OK, 1 row affected (0.00 sec)
mysql> select * from kaifa;
+----+-----------+
| id | name |
+----+-----------+
| 1 | bob |
| 2 | join |
+----+-----------+
2 rows in set (0.00 sec)

然后在master2数据库上查看,发现数据已经同步过来了!
mysql> select * from test.kaifa;
+----+-----------+
| id | name |
+----+-----------+
| 1 | bob |
| 2 | join |
+----+-----------+
2 rows in set (0.00 sec)
2)在master2数据库上写入新数据
mysql> create database ceshi;
Query OK, 1 row affected (0.00 sec)

mysql> insert into test.kaifa values(3,"kaifa"),(4,"kaifa");
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0

然后在master1数据库上查看,发现数据也已经同步过来了!
mysql> show databases;+--------------------+
| Database |
+--------------------+
| information_schema |
| ceshi |
| test |
| mysql |
| performance_schema |
| test |
+--------------------+6 rows in set (0.00 sec)

mysql> select * from test.kaifa;
+----+-----------+
| id | name |
+----+-----------+
| 1 | bob |
| 2 | join |
| 3 | kaifa |
| 4 | kaifa |
+----+-----------+
4 rows in set (0.00 sec)

至此,Mysql主主同步环境已经实现。

nginx搭建;

1.在两台数据库添加权限
GRANT ALL ON *.* TO 'root'@'10.1.1.152.%' IDENTIFIED BY 'j0!uN@Da12tA&*ba3S&e';
FLUSH PRIVILEGES;

2.

[root@ecs-01 ~]# wget http://nginx.org/download/nginx-1.9.9.tar.gz
[root@ecs-01 ~]# tar xf nginx-1.9.9.tar.gz
[root@ecs-01 ~]# cd nginx-1.9.9
[root@ecs-01 nginx-1.9.9]# ./configure --prefix=/usr/local/nginx --with-stream ----with-http_stub_status_module --with-http_ssl_module

[root@ecs-01 nginx-1.9.9]# make
[root@ecs-01 nginx-1.9.9]# make install

--with-stream ---支持TCP的意思

[root@ecs-01 conf]# vi /usr/local/nginx/conf/nginx.conf

加入类似于http一样的模块:

stream {

    upstream mysql {

    hash $remote_addr consistent;

    server 10.1.1.142:3306 weight=5;
    server 10.1.1.106:3306 weight=5;

    }

    server {

        listen 3306;

        proxy_connect_timeout 1s;

        proxy_timeout 3s;

        proxy_pass mysql;

    }

}

/usr/local/nginx/sbin/nginx 启动
/usr/local/nginx/sbin/nginx -s reload 重启

测试:

方法一:

在114.115.174.215 这台上远程连接nginx服务器,前提是这台上也装有msyql

mysql -uroot -pj0!uN@Da12tA&*ba3S&e -h 114.115.174.210 -P 7306

方法二:

用navicat连接nginx测试

nginx+mysql双主搭建的更多相关文章

  1. keepalived+MySQL双主搭建

    keepalived+MySQL双主搭建过程 首先要简单了解一下keepalived: Keepalived是Linux下一个轻量级别的高可用解决方案.高可用(High Avalilability,H ...

  2. 基于keepalived搭建mysql双主高可用

    目录 概述 环境准备 keepalived搭建 mysql搭建 mysql双主搭建 mysql双主高可用搭建 概述 传统(不借助中间件)的数据库主从搭建,如果主节点挂掉了,从节点只能读取无法写入,只能 ...

  3. centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数据库读写分离 双主搭建 mysql.history 第二十九节课

    centos  MySQL主从配置 ntsysv   chkconfig  setup命令  配置MySQL 主从 子shell  MySQL备份  kill命令  pid文件  discuz!论坛数 ...

  4. 在Docker下搭建MySQL双主双重集群(单机展示,与多机原理一致)

    前言 Docker的安装部署&在Docker下MySQL的安装与配置 https://www.cnblogs.com/yumq/p/14253360.html 在Docker进行单机主从复制M ...

  5. Mysql双主双从高可用集群的搭建且与MyCat进行整合

    1.概述 老话说的好:瞻前顾后.患得患失只会让我们失败,下定决心,干就完了. 言归正传,之前我们聊了Mysql的一主一从读写分离集群的搭建,虽然一主一从或一主多从集群解决了并发读的问题,但由于主节点只 ...

  6. 通过keepalived搭建MySQL双主模式的高可用集群系统

    1. 配置MySQL双主模式 1.修改my.cnf配置文件 默认情况下,MySQL的配置文件是/etc/my.cnf,在配置文件的[mysqld]段添加如下内容: server-id=1 log-bi ...

  7. MySQL双主热备问题处理

    1. Slave_IO_Running: No mysql> show slave status\G *************************** 1. row *********** ...

  8. mysql双主架构

    注意:最好不要用innodedb来同步数据库,要用databus来同步数据库,数据量大要用上mycat中间件 Mysql主主同步环境部署: centos 7.4 三台云主机: mysql1 :10.1 ...

  9. MySQL双主(主主)架构方案

    在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql主从方案,一主多从,读写分离等,但是单主存在单点故障,从库切换成主库需要作改动.因此,如果是双主或者多主,就会增加mysql入 ...

随机推荐

  1. Mybatis接口中传递多个参数

    1.接口 public interface MemberMapper { public boolean insertMember(Members member); public Members sel ...

  2. 用Python写网络爬虫 第二版

    书籍介绍 书名:用 Python 写网络爬虫(第2版) 内容简介:本书包括网络爬虫的定义以及如何爬取网站,如何使用几种库从网页中抽取数据,如何通过缓存结果避免重复下载的问题,如何通过并行下载来加速数据 ...

  3. HDU-1398-Square Coins(母函数)

    链接: https://vjudge.net/problem/HDU-1398 题意: People in Silverland use square coins. Not only they hav ...

  4. JSP数据交互(二)

    Application:当前服务器(可以包含多个会话):当服务器启动后就会创建一个application对象,被所有用户共享page.request.session.application四个作用域对 ...

  5. learning scala implicit class

    隐式类可以用来扩展对象的功能非常方便 example: object ImplicitClass_Tutorial extends App { println("Step 1: How to ...

  6. Educational Codeforces Round 72

    目录 Contest Info Solutions A. Creating a Character B. Zmei Gorynich C. The Number Of Good Substrings ...

  7. Gym - 102346G Getting Confidence 最小费用最大流

    Gym - 102346GGetting Confidence 题意:n*n的格子,每个格子上有一个数,要求每行每列都只能拿一个数,使得乘积最大,然后输出每列选择的是第几行的数. 如果是加法的话,那么 ...

  8. centos7 安装python3.7.1

    centos7自带python2,由于执行yum需要python2,所以即使安装了python3也不能删除python21.安装依赖包yum -y groupinstall "Develop ...

  9. 数据结构实验之二叉树一:树的同构 (SDUT 3340)

    题解:把原本结构体的左右子树的类型定义成 int 型,用来存放这个结点的左右子树的编号,分别建造两棵二叉树,按个比较,如果在第二棵树中没有找到,那么就不用在判断了. #include <bits ...

  10. python 监视和控制鼠标键盘的输入(使用pynput 而非pyhook)

    百度上搜到的文章大多基于pyhook, pip不能直接安装,托管在sourceForge上的代码仓库也找不到. google上发现可以使用pynput,貌似控制更为简单,而且可以直接使用pip安装 示 ...