1.软件准备
- 下载MySQL:wget https://obs.cn-north-4.myhuaweicloud.com/obs-mirror-ftp4/database/mysql-5.7.27-aarch64.tar.gz
- https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.34-1.el7.x86_64.rpm-bundle.tar
2.安装MySQL
-
解压MySQL
tar -xvf xxx.tar.gz
-
将MySQL解压文件移动
mv mysql /usr/local
-
创建数据目录
mkdir /data/mysql
-
新建mysql用户、组及目录
groupadd mysql useradd -r -s /sbin/nologin -g mysql mysql -d /usr/local/mysql ---新建msyql用户禁止登录shell
-
修改目录属有者
chown -R mysql:mysql /usr/local/mysql chown -R mysql:mysql /data/mysql
-
配置参数初始化
bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql 记住生成的临时密码:[Note] A temporary password is generated for root@localhost:YLi>7ecpe;YP
-
SSL的安装与配置
bin/mysql_ssl_rsa_setup --datadir=/data/mysql #执行完后数据目录下多出了一些以pem结尾的文件,而这些文件就是开启SSL连接所需要的文件
-
解决初始化数据库碰到的类库的问题
将extra的库复制到 /usr/lib64目录下 删除软链接 新建软链接
-
将配置文件复制到对应的目录下
cp mysql/my.cnf /etc/my.cnf cp support-files/mysql.server /etc/init.d/mysqld
-
添加环境变量
# vim /etc/profile 添加: export PATH=/usr/local/mysql/bin:$PATH # source /etc/profile
-
修改my.cnf配置文件
第一个mysql主节点的配置文件sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES #主主复制配置: auto_increment_offset=1 auto_increment_increment=2 #启用二进制日志 注意:日志的目录需要先建立,并将所有者该为mysql log-bin=mysql-bin binlog_format=row log_bin_trust_function_creators=1 #注:不加binlog-do-db和binlog_ignore_db,那就表示全部数据库都记录二进制日志。 #需要记录二进制日志的数据库,如果有多个数据库,需要重复设置此参数,每个数据库一行 binlog-do-db=ambari binlog-do-db=hive binlog-do-db=ranger #不需要记录二进制日志的数据库,如果有多个数据库,需要重复设置此参数,每个数据库一行 binlog-ignore-db=mysql binlog-ignore-db=information_schema binlog-ignore-db=performance_schema #超过30天的binlog删除 expire_logs_days=30 #服务器唯一ID,默认是1,一般取IP最后一段 server-id=4 #配置从库上的更新操作是否写入二进制文件,如果这台从库,还要做其他从库的主库,那么就需要打这个参数,以便从库的从库能够进行日志同步 log-slave-updates sync_binlog=1 #中继日志文件 relay_log = mysql-relay-bin #需要复制的数据库名,如果有多个数据库,需要重复设置此参数,每个数据库一行 replicate-do-db=ambari replicate-do-db=hive replicate-do-db=ranger #不需要复制的数据库,如果有多个数据库,需要重复设置此参数,每个数据库一行 replicate-ignore-db=mysql replicate-ignore-db=information_schema replicate-ignore-db=performance_schema
第二个mysql主节点的配置文件
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES #主主复制配置: auto_increment_offset=2 auto_increment_increment=2 #启用二进制日志 注意:日志的目录需要先建立,并将所有者该为mysql log-bin=mysql-bin binlog_format=row log_bin_trust_function_creators=1 #注:不加binlog-do-db和binlog_ignore_db,那就表示全部数据库都记录二进制日志。 #需要记录二进制日志的数据库,如果有多个数据库,需要重复设置此参数,每个数据库一行 binlog-do-db=ambari binlog-do-db=hive binlog-do-db=ranger #不需要记录二进制日志的数据库,如果有多个数据库,需要重复设置此参数,每个数据库一行 binlog-ignore-db=mysql binlog-ignore-db=information_schema binlog-ignore-db=performance_schema #超过30天的binlog删除 expire_logs_days=30 #服务器唯一ID,默认是1,一般取IP最后一段 server-id=3 #配置从库上的更新操作是否写入二进制文件,如果这台从库,还要做其他从库的主库,那么就需要打这个参数,以便从库的从库能够进行日志同步 log-slave-updates sync_binlog=1 #中继日志文件 relay_log = mysql-relay-bin #需要复制的数据库名,如果有多个数据库,需要重复设置此参数,每个数据库一行 replicate-do-db=ambari replicate-do-db=hive replicate-do-db=ranger #不需要复制的数据库,如果有多个数据库,需要重复设置此参数,每个数据库一行 replicate-ignore-db=mysql replicate-ignore-db=information_schema replicate-ignore-db=performance_schema
-
启动数据库并配置
bin/mysqld_safe --user=mysql & 或者service mysqld start in/mysql --user=root –p 输入 6 操作步骤生成的临时密码 重新设置密码: mysql> set global validate_password_policy=0; mysql> set global validate_password_length=1; mysql> set password=password('xxxxxx'); mysql> grant all privileges on *.* to root@'%' identified by 'xxxxxx'; mysql> grant all privileges on *.* to 'root'@'%' with grant option; 允许远程登录: mysql>grant all privileges on *.* to root@'%' identified by 'xxxxxx'; mysql> flush privileges; 查看用户信息 mysql> use mysql; mysql> select host,user from user where user='root'; +-----------+------+ | host | user | +-----------+------+ | % | root | | localhost | root | +-----------+------+
-
设置主主复制
在第一节点MySQL上配置同步第二节点MySQL的数据(第一节点是备,第二节点是主)mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replication'@'第二节点的IP' IDENTIFIED BY 'repl_password'; 查看5第二节点主 mysql master 状态 mysql> show master status; +------------------+----------+-------------------+--------------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+-------------------+--------------------------+-------------------+ | mysql-bin.000009 | 154 | ambari,hive,ranger| mysql,information_schema | | +------------------+----------+-------------------+--------------------------+-------------------+ mysql> change master to master_host='第二节点的IP', master_user='replication', master_password='repl_password', master_log_file='mysql-bin.000009', master_log_pos=154; #对端状态显示的值 mysql> start slave;
在第二节点MySQL上配置同步第一节点MySQL的数据(第一节点是主,第二节点是备),操作如上,对应的master_host、master_log_file、aster_log_pos都需要替换成对应主MySQL的信息
-
检查主主是否进行同步了
mysql>show slave status \G 状态返回如下信息为正常: Slave_IO_Running:Yes Slave_SQL_Running:Yes Seconds_Behind_Master: 0 若数据不同步则需要重新设置:
-
设置MySQL开机自启
chmod 755 /etc/init.d/mysqld chkconfig --add mysqld chkconfig --level 345 mysqld on
3.配置keepalive
- 安装keepalive
yum install keepalived -y
- 配置第一节点的keepalive参数
#vi /etc/keepalived/keepalived.conf global_defs { notification_email { } } vrrp_instance PX_MYSQL { state MASTER #state BACKUP interface bond1 virtual_router_id 50 priority 100 advert_int 1 authentication { auth_type PASS auth_pass password123 } virtual_ipaddress { 浮动IP } } virtual_server 浮动IP 3306 { delay_loop 3 lb_algo wrr lb_kind DR persistence_timeout 9600 protocol TCP real_server 第一节点的IP 3306 { notify_down /usr/sbin/stop_keepalived.sh weight 1 TCP_CHECK { connect_timeout 10 connect_port 3306 } } }
- 配置第二节点的 keepalve参数
global_defs { notification_email { } } vrrp_instance PX_MYSQL { state MASTER #state BACKUP interface bond1 virtual_router_id 50 priority 90 advert_int 1 authentication { auth_type PASS auth_pass password123 } virtual_ipaddress { 浮动IP } } virtual_server 浮动IP 3306 { delay_loop 3 lb_algo wrr lb_kind DR persistence_timeout 9600 protocol TCP real_server 第二节点MySQL的IP 3306 { notify_down /usr/sbin/stop_keepalived.sh weight 1 TCP_CHECK { connect_timeout 10 connect_port 3306 } } }
- 设置脚本
vi /usr/sbin/start_keepalived.sh
vi /usr/sbin/stop_keepalived.sh#!/bin/sh #start keepalived if mysqld started. if [ $(systemctl status mysqld|grep -c "active (running)") -eq 1 ]; then if [ $(systemctl status keepalived|grep -c "active (running)") -eq 0 ]; then systemctl start keepalived fi fi
chmod 755 /usr/sbin/start_keepalived.sh#!/bin/sh systemctl stop keepalived
chmod 755 /usr/sbin/stop_keepalived.sh - 配置自检监控
* * * * * /usr/sbin/start_keepalived.sh &>/dev/null
- 启动
systemctl start keepalived
systemctl enable keepalived