目录
前言
本文章是《拉勾高薪训练营》中的《mysql海量数据存储与优化》 的作业
参考博客:mha0.56版本安装使用排错
参考博客:VMware创建CentOS7虚拟机
参考博客:linux 使用ssh密钥实现免密码登录
1. 相关安装文件
- 虚拟机环境VMware15
- linux CentOS 7 64位系统镜像iso
- mysql安装包
- mha安装包
- SecureCRT
2. 虚拟机、mysql数据库安装
2.1 安装VMware 15 以及 linux 操作系统
(1)从网上下载 VMware 15安装包,安装虚拟机,这里就不做叙述
(2)打开VMware 15 创建虚拟机,按照提示安装 CentOS 7 操作系统
注意事项:笔者在安装CentOS 时,提示虚拟机打印机设备未启用,然后虚拟机黑屏,无法关闭虚拟机,无法重启。
在虚拟机页面(编辑>首选项>设备>虚拟机打印机>启用虚拟打印机),选上启用虚拟打印机后,就可用正常启用虚拟机了。如果有同学遇到相同的情况,在此提供一个参考
2.2 安装mysql数据库
2.2.1安装环境准备
(1)用SecureCRT连接VMware虚拟机
(2)在home下创建目录mysql,/home/mysql
(2)使用SeureCRT自带的SecureFX上传mysql安装包
2.2.2 mysql 数据库安装
(1) 确认linux是由有原装mysql,如果有的话,就删掉
[root@localhost mha]# rpm -qa | grep mariadb
mariadb-libs-5.5.41-2.el7_0.x86_64
[root@localhost mha]# rpm -e mariadb-libs-5.5.41-2.el7_0.x86_64 --nodeps
(2)进入到mysql安装包的上传目录/home/mysql,解压安装包,并执行安装命令
[root@localhost mysql]# cd /home/mysql/
[root@localhost mysql]# tar -xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
mysql-community-embedded-5.7.28-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
mysql-community-devel-5.7.28-1.el7.x86_64.rpm
mysql-community-embedded-compat-5.7.28-1.el7.x86_64.rpm
mysql-community-libs-5.7.28-1.el7.x86_64.rpm
mysql-community-test-5.7.28-1.el7.x86_64.rpm
mysql-community-common-5.7.28-1.el7.x86_64.rpm
mysql-community-embedded-devel-5.7.28-1.el7.x86_64.rpm
mysql-community-client-5.7.28-1.el7.x86_64.rpm
mysql-community-server-5.7.28-1.el7.x86_64.rpm
(3)解压后的组件不需要全部安装,安装其中的几个就可用
[root@localhost mysql] rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm
[root@localhost mysql] rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm
[root@localhost mysql] rpm -ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
[root@localhost mysql] rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
[root@localhost mysql] rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm
[root@localhost mysql] rpm -ivh mysql-community-devel-5.7.28-1.el7.x86_64.rpm
(4) 进行mysql初始化,初始化完成后,会给root用户生成一个默认密码,一般在/var/log/mysqld.log日志文件中的最下面
[root@localhost mysql] mysqld --initialize --user=mysql # --user 是可选的参数,意思是创建一个名称是 mysql 的用户
[root@localhost mysql] tail -f /var/log/mysqld.log
A temporary password is generated for root@localhost:decGRE#$
(5)启动mysql,并查看mysql的运行状态
[root@localhost mysql] systemctl start mysqld.service
[root@localhost mysql] systemctl status mysqld.service
(6)使用上面的密码登录mysql,并修改root密码
[root@localhost mysql] mysql -uroot -pdecGRE#$
mysql > set password=password('123456');
(7)开放3306端口或者关闭防火墙,因为我这里是测试环境,所以直接关闭了防火墙,在正式环境需要开放3306端口
[root@localhost mysql] systemctl stop firewalld # firewalld 防火墙,CentOS 自带
[root@localhost mysql] systemctl disable firewalld.service # 彻底一点,从开机启动中禁用掉
2.3 克隆centos虚拟机
因为我是练习环境,直接复制虚拟机
配置好mysql之后,直接拷贝两份虚拟机,这样就不需要再配置两次虚拟机环境了
(1) 右键点击已配置好的虚拟机>管理>克隆
(2) 需要注意,复制的虚拟机中要修改一下mysql的 /var/lib/mysql/auto.cnf,这个里面记录的是mysql的UUID,每个MySQL环境不能一样
(3)修复方式就是将这个文件删了,重启一下mysql就可以了
[root@localhost mysql]# systemctl stop mysqld.service
[root@localhost mysql]# mv /var/lib/mysql/auto.cnf /var/lib/mysql/auto.cnf.bak
[root@localhost mysql]# systemctl start mysqld.service
3. 配置一主两从mysql集群模式
3.1配置主库
(1)选一台虚拟机做为主数据库,修改配置文件/etc/my.cnf,保存退出
# log_bin
server-id=1 # 设置 server-id,每个数据库不能重复,必须
log_bin=mysql-bin # 指定 binlog 的名称,相当于开启 bin log, 必须
sync-binlog=1 # 开始刷新 bin log 到磁盘,每次有更新事务,完成后都要马上刷新到磁盘
binlog-ignore-db=performance_schema # binlog 中忽略的库
binlog-ignore-db=information_schema
binlog-ignore-db=sys
#binlog-do-db=lagou # 可以使用这个参数指定只同步那个库
(2)重启mysql
[root@localhost mysql]# systemctl restart mysqld
(3)登录进mysql,进行授权操作
mysql > grant replication slave on *.* to 'root'@'%' identified by 'root';
mysql > grant all privileges on *.* to 'root'@'%' identified by 'root';
mysql > flush privileges;
(4)查看一下master的状态,注意下面的File和Position参数,之后配置从库时需要用到
mysql> show master status;
+------------------+----------+--------------+-------------------------------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+-------------------------------------------+-------------------+
| mysql-bin.000003 | 154 | | performance_schema,information_schema,sys | |
+------------------+----------+--------------+-------------------------------------------+-------------------+
3.2 配置从库
(1)修改每个从库的配置文件/etc/my.cnf
server-id=3 # 注意一个集群环境中的 id 不能冲突
relay_log=mysql-relay-bin
# read_only=1 # 开启只读
(2)重启数据库,配置从库参数,需要注意两个参数
master_log_file:使用的是主库中bin log文件名,使用的是3.1.4的master状态中的File这一个参数的值
master_log_pos:主库bin log文件当前写的位置,使用的是3.1.4的master状态中的Position这一个参数的值
[root@localhost mysql]# systemctl restart mysqld
[root@localhost mysql]# mysql -uroot -proot
mysql > show slave status; # 查看 salve 状态,如果已经是开启状态,需要先 stop slave;修改配置后,在 start slave;
# 设置主库的 bin log 信息(用到了主库中当前 bin log 的文件名称以及当前写位置)
mysql > change master to master_host='192.168.122.128',master_port=3306,master_user='root',master_password='root',master_log_file='mysql-bin.000003',master_log_pos=154;
mysql > show slave status; # 查看从库状态, 第一次配置,此时连接 master 的状态应该是 No
mysql > start slave; # 开启 salve 模式
(3) 查看从库状态,证明从库连上了master
mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.122.128
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000012
Read_Master_Log_Pos: 433
Relay_Log_File: mysql-relay-bin.000038
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000012
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 433
Relay_Log_Space: 1569
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: