1 MySQL启用主主双写复制

1.1 卸载系统默认的数据库mariadb

安装mysql出现安装包不兼容问题,首先卸载掉系统自带mariadb

查看已经安装的mariadb

rpm -qa|grep mariadb

删除mariadb

rpm -e --nodeps  mariadb-libs-5.5.33a-3.el7.x86_64

rpm -e --nodeps  mariadb-server-5.5.44-2.el7.x86_64

rpm -e mariadb-devel --nodeps

rpm -e mariadb --nodeps

直到rpm -qa|grep mariadb命令输出为空

1.2 卸载旧版安装包

检查MySQL及相关RPM包,是否安装,如果有安装,则移除(rpm –e 名称)

rpm -qa | grep -i mysql

yum -y remove MySQL-*

1.3 安装MySQL

1.3.1 解压安装MySQL

tar xvf MySQL-5.5.52-1.el7.x86_64.rpm-bundl.tar

MySQL-client-5.5.52-1.el7.x86_64.rpm

 MySQL-devel-5.5.52-1.el7.x86_64.rpm

 MySQL-embedded-5.5.52-1.el7.x86_64.rpm

 MySQL-server-5.5.52-1.el7.x86_64.rpm

 MySQL-shared-5.5.52-1.el7.x86_64.rpm

 MySQL-shared-compat-5.5.52-1.el7.x86_64.rpm

 MySQL-test-5.5.52-1.el7.x86_64.rpm

安装MySQL-client-5.5.52-1.el7.x86_64.rpm,MySQL-server-5.5.52-1.el7.x86_64.rpm,MySQL-devel-5.5.52-1.el7.x86_64.rpm即可

rpm -ivh MySQL-server-5.5.52-1.el7.x86_64.rpm
rpm -ivh MySQL-client-5.5.52-1.el7.x86_64.rpm
rpm -ivh MySQL-devel-5.5.52-1.el7.x86_64.rpm

1.3.2 修改配置文件位置

cp /usr/share/mysql/my-default.cnf /etc/my.cnf

1.3.3 初始化MySQL及设置密码

初始化数据库并启动mysql

/usr/bin/mysql_install_db

service mysql start

查看root账号初始密码

cat /root/.mysql_secret

The random password set for the root user at Wed Dec 11 23:32:50 2013 (local time): qKTaFZnl

修改root密码为111111

mysql -uroot –pqKTaFZnl
mysql> SET PASSWORD = PASSWORD('111111');
mysql> exit
或者
mysql> use mysql;
mysql> update user set password=password("111111") where user='root';
mysql> flush privileges;
mysql> exit;

验证登录

mysql -uroot -p111111

1.3.4 安装MySQL JDBC驱动

yum -y install mysql-connector-java

1.3.5 允许远程登陆

mysql> use mysql;
mysql> select host,user,password from user;
+-----------+------+-------------------------------------------+
| host | user | password |
+-----------+------+-------------------------------------------+
| localhost | root | *FD571203974BA9AFE270FE62151AE967ECA5E0AA |
| node1a146 | root | *F99E6AEA8DF26B30DA7A57F92F3FABC0E4949F12 |
| 127.0.0.1 | root | *F99E6AEA8DF26B30DA7A57F92F3FABC0E4949F12 |
| ::1 | root | *F99E6AEA8DF26B30DA7A57F92F3FABC0E4949F12 |
+-----------+------+-------------------------------------------+
mysql> update user set password=password('111111') where user='root';
mysql> update user set host='%' where user='root' and host='localhost';
mysql> flush privileges;
mysql> exit

1.3.6 设置开机自启动

chkconfig mysql on

chkconfig --list | grep mysql

1.3.7 MySQL的默认安装位置

/var/lib/mysql/ #数据库目录

/usr/share/mysql #配置文件目录

/usr/bin #相关命令目录

/etc/init.d/mysql #启动脚本

1.3.8 修改字符集和数据存储路径

查看初始字符集

mysql> show variables like '%collation%';

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

| Variable_name | Value |

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

| collation_connection | utf8_general_ci |

| collation_database | latin1_swedish_ci |

| collation_server | latin1_swedish_ci |

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

3 rows in set (0.00 sec)

mysql> show variables like '%char%';

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

| Variable_name | Value |

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

| character_set_client | utf8 |

| character_set_connection | utf8 |

| character_set_database   | latin1 |

| character_set_filesystem | binary                |

| character_set_results | utf8 |

| character_set_server | latin1 |

| character_set_system | utf8 |

| character_sets_dir | /usr/share/mysql/charsets/ |

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

8 rows in set (0.00 sec)

配置/etc/my.cnf文件,修改数据存放路径、mysql.sock路径以及默认编码utf-8.

[client]

password = 111111

port = 3306

default-character-set=utf8

[mysqld]

port = 3306

character_set_server=utf8

character_set_client=utf8

collation-server=utf8_general_ci

(注意linux下mysql安装完后是默认:表名区分大小写,列名不区分大小写; 0:区分大小写,1:不区分大小写)

lower_case_table_names=1

(设置最大连接数,默认为 151,MySQL服务器允许的最大连接数16384; )

max_connections=1000

[mysql]

default-character-set = utf8

重启使生效

service mysql restart

1.3.9 异常处理

问题1:

如果执行sql时报下面错误是由于你升级过数据库,升级完后没有使用mysql_upgrade升级数据结构造成的。

ERROR 1558 (HY000): Column count of mysql.user is wrong. Expected 43, found 42. Created with MySQL 50544, now running 50637. Please use mysql_upgrade to fix this error.

使用mysql_upgrade命令

root@localhost ~]# mysql_upgrade -u root -p 111111

1.4 配置MySQL主主同步

主主同步就是两台机器互为主的关系,在任何一台机器上写入都会同步。

1.4.1 创建同步账号

分别在两台机器上配置同步账号

master1机器上:

mysql> grant all privileges on . to 'repl'@'%' identified by '123456';

mysql> flush privileges;

master2机器上:

mysql> grant all privileges on . to 'repl'@'%' identified by '123456';

mysql> flush privileges;

1.4.2 配置数据库参数

master1机器上:

1、关闭

service mysql stop

2、更改配置文件/etc/my.cnf

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

server-id=1

log-bin=mysql-bin

relay_log=mysql-relay-bin

binlog_format=ROW

report-host = master2

report-user = repl

report-password = 123456

report-port = 3306

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

其中标红为新增内容:

l Log-bin:启动二进制日志文件

l Server-id:本机数据库ID(和)

l Binlog_format:一共有三种复制方式:ROW\STATEMENT\MIXED,默认是STATEMENT

l report-host,report-user,report-password,report-port为master复制的主机名,用户,密码以及端口号。

3、启动mysql

service mysql start

Master2机器上:

1、关闭

service mysql stop

2、更改配置文件/etc/my.cnf

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

server-id=1

log-bin=mysql-bin

relay_log=mysql-relay-bin

binlog_format=ROW

report-host = master2

report-user    = repl

report-password = 123456

report-port = 3306

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid
```shell
3、启动mysql service mysql start ### 1.4.3 备份数据库
备份两个需要同步的数据库数据以防同步失败时数据丢失。
备份mysql mysqldump --all-databases -uroot -p > mysql.sql ### 1.4.4 设置master2同步master1
**master1机器上:**
```shell
mysql> flush tables with read lock;
mysql> show master status;
+---------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB |Binlog_Ignore_DB | +---------------+----------+--------------+------------------+ | binlog.000003 | 365 | | | +---------------+----------+--------------+------------------+ 1 row in set (0.03 sec) mysql> unlock tables;

master2机器上:

设置master2同步master1数据

mysql> change master to master_host='master1IP', master_port=3306, master_user='repl',master_password='123456', master_log_file='binlog.000003',master_log_pos=365;

开启同步
mysql> start slave; 执行这命令后 注意观察下面这两个参数,必须要都是yes才行
mysql> show slave status \G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

master_host表示是master1的IP

master_user表示主库master1上允许同步的用户

maser_password表示同步用户的密码

master_log_file表示从哪个binlog文件开始同步

master_log_pos表示从该binlog文件的那个pos节点位置开始同步

我们查看同步是否主要是查看Slave_IO_Running与Slave_SQL_Running选项。如果正常同步,这两选必须同时为YES。

如果Slave_IO_Running为NO,说明可能是从库与主库的网络不通。

如果Slave_SQL_Running为NO,说明很可能是从库与主库的数据不一致。

如果Slave_IO_Running: Connecting,可能是同步的用户密码写错了。

同样的 反过来做相同操作

1.4.5 设置master1同步master2

master2机器上:

mysql> flush tables with read lock;
mysql> show master status;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB |Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| binlog.000004 | 207 | | |
+---------------+----------+--------------+------------------+
1 row in set (0.03 sec) mysql> unlock tables;

master1****机器上:

mysql> change master tomaster_host='10.1.1.21', master_port=3306, master_user='repl',master_password='123456', master_log_file='binlog.000004',master_log_pos=207;
mysql> start slave;
mysql> show slave status \G
执行这命令后 注意观察下面这两个参数,必须要都是yes才行
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

介此,主主同步打造完成,可以简单测试一下,分别在两个机器上写数据 看看会不会同步到另一台机器上

PS:如果报错Slave_IO_Running: NO 可以检查同步的账号是否创建正常!

1.5 安装keepalived 并设置监控

keepalived是安装在两台MySQL服务器上的

首先安装keepalived 过程不解释就正常解压安装就好

安装后配置 vim /etc/keepalived/keepalived.conf 内容如下

10.1.1.20的配置文件


! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_instance VI_1 { state backup #两台配置此处均是BACKUP interface eth0 virtual_router_id 51 priority 100 #优先级,另一台改为90 advert_int 1 nopreempt #不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.1.1.25 } } virtual_server 10.1.1.25 3306 { delay_loop 6 lb_algo wrr lb_kind DR persistence_timeout 50 #会话保持时间 protocol TCP real_server 10.1.1.20 3306 { weight 3 notify_down /tmp/nimei.sh #检测到mysql服务挂了就执行这个脚本(脚本要自己写哈) TCP_CHECK { connect_timeout 10 #连接超时时间 nb_get_retry 3 #重连次数 delay_before_retry 3 #重连间隔时间 connect_port 3306 #健康检查端口 } } }

10.1.1.21的配置文件

! Configuration File for keepalived

global_defs {

  notification_email {

    acassen@firewall.loc

    failover@firewall.loc

    sysadmin@firewall.loc

  }

  notification_email_from Alexandre.Cassen@firewall.loc

  smtp_server 127.0.0.1

  smtp_connect_timeout 30

  router_id LVS_DEVEL

}

vrrp_instance VI_1 {

  state backup

  interface eth0

  virtual_router_id 51

  priority 90

  advert_int 1

  authentication {

      auth_type PASS

      auth_pass 1111

  }

  virtual_ipaddress {

      10.1.1.25

  }

}

virtual_server 10.1.1.25 3306 {

  delay_loop 6

  lb_algo wrr

  lb_kind DR

  persistence_timeout 50

  protocol TCP

real_server 10.1.1.21 3306 {

      weight 3

      notify_down /tmp/nimei.sh

      TCP_CHECK {

      connect_timeout 10

      nb_get_retry 3

      delay_before_retry 3

      connect_port 3306

          }

      }

}

编写监控mysql服务是否挂了的脚本,按照上面配置文件的位置编写脚本。

vim /tmp/nimei.sh

#!/bin/sh 

pkill keepalived

脚本很简单就一句,目的是当keepalived检测到mysql服务挂了之后触发这个脚本,杀死keepalived进程,让另一台机器接管

好 修改后启动keeplived服务

介此整个集群搭建完成

1.6 测试

找一台机器用虚拟ip连接mysql

[root@localhost html]# mysql -uab  -h 10.1.1.25 -p123

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 736

Server version: 5.1.66-log Source distribution

Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

这样成功连上了,然后你可以任意关闭某台机器,或者某台机器的mysql服务,看看还能不能连上!!

MYSQL HA 部署手册的更多相关文章

  1. LVS+MYCAT读写分离+MYSQL同步部署手册(第三版)

    1      配置MYSQL主备同步 1.1    测试环境 mysql版本:5.6.24: 操作系统内核版本:Linux-3.13-0-32 主数据库IP:192.168.10.3: 主数据库名:d ...

  2. LVS+MYCAT+读写分离+MYSQL主备同步部署手册

    LVS+MYCAT+读写分离+MYSQL主备同步部署手册 1          配置MYSQL主备同步…. 2 1.1       测试环境… 2 1.2       配置主数据库… 2 1.2.1  ...

  3. 【转载】LVS+MYCAT+读写分离+MYSQL主备同步部署手册(邢锋)

    LVS+MYCAT+读写分离+MYSQL主备同步部署手册 1          配置MYSQL主备同步…. 2 1.1       测试环境… 2 1.2       配置主数据库… 2 1.2.1  ...

  4. nginx+php-fpm+mysql分离部署详解

    相信大家将这三者部署到同一台主机应该已经不陌生了,今天在这里,给大家演示一下如何将三者部署到三台主机上. 实验系统:CentOS 6.6_x86_64 实验前提:大部分软件使用编译安装,请提前准备好编 ...

  5. 如何基于Azure平台实现MySQL HA(方法论篇)

    我们都知道,相较于传统的数据中心,Pulic cloud也有劣势,比如说数据库的HA,很多熟悉公有云平台的读者都知道,因为出于安全性性考虑以及一些技术条件的限制,很多本地数据中心的mysql HA方法 ...

  6. MariaDB Galera Cluster部署手册

    MariaDB Galera Cluster部署手册 galara保证双主数据库的同步及一致性 1.环境准备 基于新部署.最小化安装centos6.5 1>  yum install opens ...

  7. 理解 OpenStack 高可用(HA) (6): MySQL HA

    本系列会分析OpenStack 的高可用性(HA)概念和解决方案: (1)OpenStack 高可用方案概述 (2)Neutron L3 Agent HA - VRRP (虚拟路由冗余协议) (3)N ...

  8. MySQL HA方案之MySQL半复制+MHA+Keepalived+Atlas+LVS[转]

    MySQL HA方案之MySQL半复制+MHA+Keepalived+Atlas+LVS 简介 目前Mysql高可用的方案有好多,比如MMM,heartbeat+drbd,Cluster等,还有per ...

  9. 【转】Nginx+php-fpm+MySQL分离部署详解

    转:http://www.linuxidc.com/Linux/2015-07/120580.htm Nginx+php-fpm+MySQL分离部署详解 [日期:2015-07-26] 来源:Linu ...

随机推荐

  1. elasticsearch多字段搜索

    https://blog.csdn.net/Ricky110/article/details/78888711 多字段搜索多字符串查询boost 参数 “最佳” 值,较为简单的方式就是不断试错,比较合 ...

  2. Ubuntu配置MYSQL远程连接

    一.修改mysql权限 1.mysql -u root -p  回车输入密码 2.use mysql:      打开数据库 3.将host设置为%表示任何ip都能连接mysql,当然您也可以将hos ...

  3. Kubernetes 实践指南之Kubernetes 的命令行工具详解

    kubectl作为客户端CLI工具,可以让用户通过命令行的方式对Kubernetes集群进行管理.本节内容将对kubectl的子命令和用法进行详细描述. 一.kubectl 用法概述 kubectl语 ...

  4. Robot Framework自动化使用

    自动化测试框架---Robot Framework Robot Framework是用Python语言写的,所以在安装Robot Framework以前必须安装Python环境.Robot Frame ...

  5. tensorflow安装排坑笔记

    由于项目需求,得用tensorflow完成,只能将mxnet的学习先放在一边,开始用tensorflow,废话不多说 首先安装anaconda+vs2015+cuda8.0+cudnn6.0 首先安装 ...

  6. R语言RODBC数据库操作

    最近准备做一个股票的数据库,用R语言来获取数据,然后存在SQL Sever 2016 express 里面,虽然前面接触过一些操作,但是还是很不熟悉,现在数据已经能获取到了,是时候好好学习一下怎么用R ...

  7. Django中views笔记

    reverse反解析 #路由中定义namespace.name,reverse可将其转换为url url = reverse('namespace:name') return redirect(url ...

  8. 实例:用户界面控件Kendo UI vs DevExpress对比评测一

    在一次使用ASP.NET MVC进行开发的Web项目中,我们需要用户界面控件来帮助实现界面的大部分功能.由于项目比较复杂,我们最终确定对 Kendo UI 和 DevExpress 这两款国际知名的用 ...

  9. cscope和ctags自动更新

    1.写一个shell脚本,定时更新数据库文件,命名为auto_load_cscope.sh,在/usr/local/bin里设置软链接为autocs #!/bin/bash cd $1 while : ...

  10. Problem 10: Summation of primes

    def primeslist(max): ''' 求max值以内的质数序列 ''' a = [True]*(max+1) a[0],a[1]=False,False for index in rang ...