MYSQL HA 部署手册
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 部署手册的更多相关文章
- LVS+MYCAT读写分离+MYSQL同步部署手册(第三版)
1 配置MYSQL主备同步 1.1 测试环境 mysql版本:5.6.24: 操作系统内核版本:Linux-3.13-0-32 主数据库IP:192.168.10.3: 主数据库名:d ...
- LVS+MYCAT+读写分离+MYSQL主备同步部署手册
LVS+MYCAT+读写分离+MYSQL主备同步部署手册 1 配置MYSQL主备同步…. 2 1.1 测试环境… 2 1.2 配置主数据库… 2 1.2.1 ...
- 【转载】LVS+MYCAT+读写分离+MYSQL主备同步部署手册(邢锋)
LVS+MYCAT+读写分离+MYSQL主备同步部署手册 1 配置MYSQL主备同步…. 2 1.1 测试环境… 2 1.2 配置主数据库… 2 1.2.1 ...
- nginx+php-fpm+mysql分离部署详解
相信大家将这三者部署到同一台主机应该已经不陌生了,今天在这里,给大家演示一下如何将三者部署到三台主机上. 实验系统:CentOS 6.6_x86_64 实验前提:大部分软件使用编译安装,请提前准备好编 ...
- 如何基于Azure平台实现MySQL HA(方法论篇)
我们都知道,相较于传统的数据中心,Pulic cloud也有劣势,比如说数据库的HA,很多熟悉公有云平台的读者都知道,因为出于安全性性考虑以及一些技术条件的限制,很多本地数据中心的mysql HA方法 ...
- MariaDB Galera Cluster部署手册
MariaDB Galera Cluster部署手册 galara保证双主数据库的同步及一致性 1.环境准备 基于新部署.最小化安装centos6.5 1> yum install opens ...
- 理解 OpenStack 高可用(HA) (6): MySQL HA
本系列会分析OpenStack 的高可用性(HA)概念和解决方案: (1)OpenStack 高可用方案概述 (2)Neutron L3 Agent HA - VRRP (虚拟路由冗余协议) (3)N ...
- MySQL HA方案之MySQL半复制+MHA+Keepalived+Atlas+LVS[转]
MySQL HA方案之MySQL半复制+MHA+Keepalived+Atlas+LVS 简介 目前Mysql高可用的方案有好多,比如MMM,heartbeat+drbd,Cluster等,还有per ...
- 【转】Nginx+php-fpm+MySQL分离部署详解
转:http://www.linuxidc.com/Linux/2015-07/120580.htm Nginx+php-fpm+MySQL分离部署详解 [日期:2015-07-26] 来源:Linu ...
随机推荐
- zzw_非root用户安装python3.5
目的:不想改变linux 自带的python,只想要用特定的非root用户运行特定版本的python 1.进入非root用户 2.新建一个python3.5的安装目录 [a4_csbdc@bdc816 ...
- A锚点实现,滚动页面内容改变tab选项
Css: ul{margin:0;padding:0;list-style:none;} a{ text-decoration: none; outline:none; -webkit-tap-hig ...
- 浏览器如何对HTML5的离线储存资源进行管理和加载
在线的情况下,浏览器发现html头部有manifest属性,它会请求manifest文件,如果是第一次访问app,那么浏览器就会根据manifest文件的内容下载相应的资源并且进行离线存储.如果已经访 ...
- mysql索引的选择
一:索引的常见模型 1.哈希表(key-value)存储的数据结构 缺点:hash索引在做区间查询时,速度慢. 优点:hash索引很适用于等值查询的场景,比如memcached以及其他一些nosql引 ...
- spring cloud config svn仓库配置
之前快速入门了一下spring cloud config 但是仓库用的别人博客上的git仓库,公司用的是svn项目管理中心,下面这个自己配置的时候出现的错误 You need to configure ...
- Android NDK pthreads详细使用
这个pthread.h文件可以在NDK环境里创建子线程,并对线程能够做出互斥所.等待.销毁等控制. 写这个博客的原因是我要写如何使用FFmpeg播放视频,因为同时需要播放音频和视频所以需要开启线程,并 ...
- Linux c codeblock的使用(二):在工程中编译多个文件
(一)前言 我们刚开始学习linux c的时候,一般都是在一个c文件里面写完所有程序,然后用gcc编译这个c文件就好了,十分简单. 但是你有没有想过,如果我们希望将不同模块的代码放到不同的c文件,然后 ...
- JS 跳出多重循环
今天学到了如何跳出多重循环
- idea提交项目到码云上
参考 https://www.cnblogs.com/BaleW/p/9293184.html
- 启动ssh服务 XSshell 生成秘钥 并注册公钥在Ubuntu linux
安装ssh服务:sudo apt-get install openssh-server 查看ssh服务: ps -ef | grep ssh 查看之后正常显示如下3行:root 8 ...