linux下mysql安装,默认主从复制配置,半同步复制配置,MHA搭建
文章目录
linux下安装mysql
环境准备
- 虚拟机:VMware-workstation-full-15.0.2-10952284
- 镜像:CentOS-7-x86_64-DVD-1503-01
- mysql:mysql-5.7.28-1.el7.x86_64.rpm-bundle
安装前准备
- 在mysql目录下准备好rpm安装包
开始安装mysql
-
解压安装包:
-
解压:tar -xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
-
解压成功显示:
-
解压之后出现很多rpm安装包,不需要全部安装,只需要安装几个主要的即可
-
-
移除mariadb
-
注意:centos7已经存在了一个mariadb,所以在安装mysql之前应该把去除mariadb,以防冲突;
-
检查mariadb是否在当前环境已经安装,命令:rpm -qa|grep mariadb
-
如图显示已经安装5.5.41
-
有则需要移除,命令:rpm -e mariadb-libs-5.5.41-2.el7_0.x86_64 --nodeps
-
删除成功如下图:
-
再次查看命令:rpm -qa|grep mariadb 什么不显示表示已经删除了
-
-
rpm安装包运行(注意顺序),如下图则表示安装成功
- 安装common:rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm
- 安装libs:rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm
- 安装libs-compat:rpm -ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
- 安装client:rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
- 安装server:rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm
- 安装devel(可不装):rpm -ivh mysql-community-devel-5.7.28-1.el7.x86_64.rpm
-
数据库实例化且自启动
-
实例化数据库:mysqld --initialize --user=mysql
-
实例化之后会产生一个root用户名,且随机生成一个密码:mWHi<DNpH7.(
-
可通过该命令查看初始化密码:cat /var/log/mysqld.log
-
启动mysql服务且作为系统自动启动:systemctl start mysqld.service
-
查看状态是否成功:systemctl status mysqld.service
-
登陆mysql:mysql -uroot -p
-
输入上面生成的随机密码
-
修改root密码:set password=password(‘root’);
-
退出(exit;)后再次进入(mysql -uroot -p)查看密码是否修改正确
-
关闭机器防火墙
-
该系统为centos7,默认防火墙为firewalld
-
关闭iptables:systemctl stop iptables(如果有安装则关闭)
-
关闭firewalld:systemctl stop firewalld
-
设置每次启动不开启防火墙:systemctl disable firewalld.service
主从复制配置
默认使用异步复制:存在数据丢失的问题
主库配置
-
配置y.cnf,在路径etc下
-
打开配置文件my.cnf追加如下
log_bin=mysql-bin(只在主库开启)
server-id=1
sync-binlog=1(选择性设置,每次写入性操作与磁盘同步)
binlog-ignore-db=information_schema(指定该库不复制)
binlog-ignore-db=performance_schema (指定该库不复制)
binlog-ignore-db=sys (指定该库不复制)
binlog-do-db=laosan (指定该库进行复制)
-
重启mysql服务:systemctl restart mysqld
-
授权性操作,主库授权给从库
-
进入mysql:mysql -uroot -p
-
复制用的用户:grant replication slave on . to ‘root’@’%’ identified by ‘root’;
-
监控用的用户:grant all privileges on . to ‘root’@’%’ identified by ‘root’;
-
刷新权限:flush privileges;
-
查询状态:show master status;需要记住File文件,表示在这个时间点开始复制;
从库配置
-
打开配置文件my.cnf追加如下
server-id=2
relay_log=mysql-relay-bin(可选)
read_only=1
-
重启mysql服务:systemctl restart mysqld
-
进入mysql:mysql -uroot -p
-
查询状态:show slave status;第一次查询后什么都不显示,
-
如果有查询到信息,需要调用stop slave来停止;
-
指明对谁进行复制:change master to master_host=‘192.168.0.107’,master_port=3306,master_user=‘root’,master_password=‘root’,master_log_file=‘mysql-bin.000003’,master_log_pos=869;
-
再来一个授权用于别的系统登录:grant all privileges on . to ‘root’@’%’ identified by ‘root’;
-
(192.168.0.105为主库的地址,mysql-bin.000001和869为主库状态信息)
-
开启slave:start slave;
-
查看slave:show slave status \G;(此时会有很多信息表明主从配置正常);
开始验证功能
- 主库创建数据库:create database laosan;
- 进入创建的数据库:use laosan;
- 创建表结构:
- 插入数据:insert into dept values (1,‘java’);
相关问题
- 主从库注意设置不同的server-id和server_uuid(复制的虚拟机server-uuid是一样的)
- 再加一台slave:
- 数据量小的话从库配置再来一遍;
- 数据量太大可先将主库数据备份一份导入到slave,再去配置主从配置的相关配置;
- 备份数据库:
- 进入某一目录再进行导出
- 可使用mysqldump --help查看各种参数和命令
- mysqldump --all-databases > mysql_back_all.sql -uroot -p
- 输入密码后ls查看备份的数据;
- 将sql文件再新机器执行即可
半同步复制
数据库配置
-
进入mysql:mysql -uroot -p
-
查看是否有动态加载插件的安装:select @@have_dynamic_loading;(YES开启)
-
查看有哪些插件:show plugins;
-
安装semi并且重命名: install plugin rpl_semi_sync_master soname ‘semisync_master.so’;(主从安装的不一样,主库是master,从库是slave)
-
查看semi相关参数:show variables like ‘%semi%’;(从库参数只有两个)
-
设置semi开启和timeout:set global rpl_semi_sync_master_enabled=1;
-
set global rpl_semi_sync_master_timeout=1000; (主库需要)
-
重启slave:stop slave;start slave;(从库需要)
-
测试
- 插入数据测试:
- 是否半同步复制,查看log日志
- 退出mysql并查看日志
- cd var/log 下mysql.log ,最后可以看到semi-sync类似的信息,半同步生效;
MHA搭建
1主,2从,1MHA
相关配置
-
由于MHA manager通过SSH访问所有的node节点,各个node节点也同样通过SSH来相互发送不同的relay log 文件,所以要在每一个node和manager上配置SSH无密码登陆
-
在4台机器上分别生成秘钥对
- ssh-******,一路回车
- ssh-******,一路回车
-
每台节点分别将自己的公钥发送到另外的三台节点
- ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
- ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
- ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
- ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
master配置
- 进入到etc/my.cng下,且修改以下参数
- server-id = 1 //复制集群中的各节点的id均必须唯一
- log-bin = master-log //开启二进制日志
两台slave配置
- 进入到etc/my.cng下,且修改以下参数
- server-id = 1 //复制集群中的各节点的id均必须唯一
- log-bin = master-log //开启二进制日志
- relay_log=mysql-relay-bin
- log-slave-updates=true //更新数据的语句也记录在slave自己的bin log中
- relay_log_purge=0 //是否自动清空不再需要中继日志
安装MHA包及验证
-
4个节点均安装node
- yum -y install perl-DBD-MySQL ncftp perl-DBI.x86
- rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
-
Manager 节点需要安装manager
- yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes -y
- 若报错:Cannot retrieve metalink for repository: epel. Please verify its path and try again
- 打开/etc/yum.repos.d/epel.repo,注释掉mirrorlist,放开baseurl
- 清理源,重新安装:yum clean all
- rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
-
创建manager工作目录
- mkdir /etc/mha
- vim /etc/mha/mha.cnf
- 配置文件如下:
- [server default] //适用于server1,2,3个server的配置
- user=mhaadmin //mha管理用户
- password=mhapass //mha管理密码
- manager_workdir=/etc/mha_master/app1 //mha_master自己的工作路路径
- manager_log=/etc/mha_master/manager.log // mha_master自己的日志文件
- remote_workdir=/mydata/mha_master/app1 //每个远程主机的工作目录在何处
- ssh_user=root // 基于ssh的**认证
- repl_user=slave //数据库用户名
- repl_password=magedu //数据库密码
- ping_interval=1 //ping间隔时长
- [server1] //节点2
- hostname=192.168.37.133 //节点2主机地址
- ssh_port=22 //节点2的ssh端口
- candidate_master=1 //将来可不可以成为master候选节点/主节点
- [server2]
- hostname=192.168.37.133
- ssh_port=22
- candidate_master=1
- [server3]
- hostname=192.168.37.144
- ssh_port=22
- candidate_master=1
-
ssh有效性验证:masterha_check_ssh --conf=/etc/mha/mha.cnf
- 复制有效性校验:masterha_check_repl --conf=/etc/mha/mha.cnf
- 启动mha:nohup masterha_manager -conf=/etc/mha/mha.cnf &>/home/mha/manager.log
- 查看是否启动:masterha_check_status --conf=/etc/mha/mha.cnf
- 停掉master mysql
- 查看mha日志:cat /etc/mha_master/manager.log
- 再次查看mysql从库状态,对应的主库已经发生变化
- 手动对主从进行配置,mha重启,并检测状态,上面已有相关方法,参考即可