MYSQL双主配置

一、为什么MYSQL要做双主?

这样做可以在一定程度上保证主库的高可用,在一台主库down掉之后,可以在极短的时间内切换到另一台主库上(尽可能减少主库宕机对业务造成的影响),减少了主从同步给线上主库带来的压力。

二、双主的思路

搭配keepalived进行使用。keepalived在实际的物理地址的基础上虚化的一个地址(VIP)。对外连接使用的便是这个浮动地址。在一台主机宕机后,这个浮动地址会跑到另外的地址上面。
mysql双主:指的是两台mysql(masterA&masterB)均可读写,互为主备。两者数据相互同步。通过keepalived对面的浮动地址便可实现高可用。
缺点也比较明显:一台mysql只负责同步数据(比较空闲),可能存在时延问题。

示意图

aaa

二、安装步骤

本教程采用mysql5.7,安装方式为rpm安装。

1、查询是否有安装旧版本mysql

rpm -qa|grep mysql

如果有,请卸载。使用命令:

rpm -e mysql-***************
#卸载报错,跳过依赖检查。使用
rpm -e mysql-**** --nodeps
#记得也卸载掉mariadb
rpm -qa|grep mariadb
rpm -e mariadb-*  --nodeps

2、解压tar包

tar -xvf mysql-------.tar

3、以此安装mysql相关rpm包。注意版本

rpm -ivh mysql-community-common-5.7.20-1.el6.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.20-1.el6.x86_64.rpm
rpm -ivh mysql-community-client-5.7.20-1.el6.x86_64.rpm
rpm -ivh mysql-community-server-5.7.20-1.el6.x86_64.rpm

ps:需要mysql开发环境的记得安装mysql-community-devel

4、启动mysql,查看密码,登录mysql。

service mysqld start
#查看密码,一串字符的东西
grep 'temporary password' /var/log/mysqld.log
#默认root用户
mysql -uroot -p

5、修改密码、修改密码复杂度、创建用户。

#修改密码复杂度
set global validate_password_policy=0;
set global validate_password_length=1;
#修改密码
set password = password('abcd@test2021');
#创建用户并赋予权限
GRANT ALL PRIVILEGES ON *.* TO 'abcd'@'%' IDENTIFIED BY 'abcd@test2021';
#创建同步用户
GRANT ALL PRIVILEGES ON *.* TO 'slave_sync'@'%'IDENTIFIED BY 'slave@test2021';
#刷新配置
flush privileges;
#退出数据库
exit

6、修改数据库存储目录

#设置开机启动
chkconfig mysqld on
#停止mysql
service mysqld stop
#关闭防火墙
systemctl stop firewalld.service
#永久关闭防火墙
systemctl disable firewalld.service
#关闭IP tables
iptables -F
#修改selinux
vi /etc/selinux/config
#修改为下面的,并保存
SELINUX=disabled
#及时生效
setenforce 0
#创建新的mysql数据存储目录
mkdir -p /data/mysql_data
#复制MySQL的相关文件,不建议mv。带上-rp 保证权限不变。
cp -rp /var/lib/mysql /data/mysql_data
#修改mysql配置文件
vi /etc/my.cnf

我放了一份我的配置文件在下面:

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
#datadir=/var/lib/mysql
#socket=/var/lib/mysql/mysql.sock

datadir=/data/mysql_data/mysql
socket=/data/mysql_data/mysql/mysql.sock
character-set-server=utf8

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

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

max_connections=1000

server-id=19                  #server的唯一标识(2台主机不同)
log-bin = mysql-bin             #打开二进制功能,MASTER主服务器必须打开此项
replicate-ignore-db = mysql     #忽略不同步主从的数据库
replicate-ignore-db = information_schema

auto_increment_offset=1         #自增id起始值
auto_increment_increment=2      #每次自增数字
binlog_format=mixed                             # 主从复制的格式(mixed,statement,row,默认格式是 statement)
#max_binlog_size=1024M          #binlog单文件最大值
binlog_checksum = none                  #跳过现有的采用checksum的事件,mysql5.6.5以后的版本中binlog_checksum=crc32,而低版本都l是binog_checksum=none
slave-skip-errors = all                 #跳过主从复制中遇到的所有错误或指定类型的错误,避免 slave 端复制中断 
expire_logs_days=0                              # 二进制日志自动删除/过期的天数。默认值为 0,表示不自动删除。
sync_binlog = 1                                 #确保binlog日志写入后与硬盘同步
port=3306



[client]
default-character-set=utf8
socket=/data/mysql_data/mysql/mysql.sock

7、双主同步设置

#启动mysql
service mysqld start
#登录mysql
mysql -uroot -pabcd@test2021
#在另外一台mysql上查看偏移量mysql-bin
show master status;
#master A的数据为master B的相关参数,如果是master B则是master B的参数
change master to master_host='192.168.3.3',master_user='salve_sync', master_password='slave@test2021', master_port=3306, master_log_file='mysql-bin.000001'
#开始同步
start slave;
#查看同步状态
show slave status\G

8、将1-7步骤在master B也做一次

#查看同步状态
show slave status\G

出现以下东西mysql状态正常

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

9、测试

在master A上创建一个数据库:

#创建数据库
create database mydb;
#创建数据表
use mydb;
#创建表
create table test
(
id int,
name varchar(255),
)

在masterB上面查看

#查看数据库
show databases;
#查看表
use mydb;
show tables;
#删除表
drop table test;
#这时master A上面应该没有test表了。
#删除库
drop database mydb;
#这时master A上面应该没有mydb库了。

mysql双主完成。

附录

mysql启动方式

#一、启动方式
#1、使用linux命令service 启动:
service mysqld start
#2、使用 mysqld 脚本启动:
/etc/inint.d/mysqld start
#3、使用 safe_mysqld 启动:
safe_mysqld&

#二、停止
#1、使用 service 启动:
service mysqld stop
#2、使用 mysqld 脚本启动:
/etc/inint.d/mysqld stop
#3、 mysqladmin shutdown

#三、重启
#1、使用 service 启动:
service mysqld restart
#2、使用 mysqld 脚本启动:
/etc/inint.d/mysqld restart

#备注:查看mysql端口是否已经使用,使用netstat -anp 命令查看服务器端口使用情况。

#第二部分,linux下重启mysql数据库的各种方法 

#1、通过rpm包安装的MySQL

#代码示例:

service mysqld restart
/etc/inint.d/mysqld start

#2、从源码包安装的MySQL 

#代码示例:

#// linux关闭MySQL的命令
$mysql_dir/bin/mysqladmin -uroot -p shutdown
#// linux启动MySQL的命令
$mysql_dir/bin/mysqld_safe &

#其中mysql_dir为MySQL的安装目录,mysqladmin和mysqld_safe位于MySQL安装目录的bin目录下。

#3、以上方法都无效时,通过强行命令:

#代码示例:

killall mysqld #关闭mysql
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值