Centos 7 ,8 下安装mysql 5.7
提示:6 为一键安装脚本
,写的不好能用,大佬勿喷
1、下载mysql 5.7
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.43-linux-glibc2.12-x86_64.tar.gz
2、创建安装目录、创建mysql账户
mkdir -p /mysql/{data,binlog-master,binlog-slave,tmp,backup}
yum -y -q install libaio numactl-libs ncurses-compat-libs libaio-devel
tar zxf mysql-5*.tar.gz -C /mysql/
mv /mysql/mysql-5* /mysql/mysql
chown -R mysql.mysql /mysql
echo "PATH=/mysql/mysql/bin:$PATH" >/etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
mysqld --initialize-insecure --user=mysql --basedir=/mysql/mysql --datadir=/mysql/data
3、生成配置文件
cat <<EOF >/etc/my.cnf
[client]
socket=/mysql/tmp/mysql.sock
[mysql]
socket=/mysql/tmp/mysql.sock
prompt=Master [\\d]>
[mysqld]
server_id=01
port=3306
user=mysql
pid_file=/mysql/tmp/mysql.pid
socket=/mysql/tmp/mysql.sock
basedir=/mysql/mysql
datadir=/mysql/data
log_error=/mysql/binlog-master/mysql.log
log_bin=/mysql/binlog-master/mysql-master-bin
gtid_mode=on
enforce_gtid_consistency=true
log_slave_updates=1
secure_file_priv=/mysql/tmp
EOF
4 、生成启动文件
cat <<EOF >/etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
After=network.target
After=syslog.target
[Service]
User=mysql
Group=mysql
ExecStart=/mysql/mysql/bin/mysqld --defaults-file=/etc/my.cnf
#ExecStart=/mysql/mysql5/bin/mysqld_safe --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
[Install]
WantedBy=multi-user.target
EOF
5、启动mysql
systemctl start mysqld
systemctl enable mysqld
6、一键安装mysql脚本
提前下载 安装包,脚本为函数编写
#!/bin/bash
#自己修改系列参数
#本脚本可以做主从复制
MASTER_IP="192.168.187.153"
MASTER_PASSWORD="123"
MASTER_REPL_USER=repl
MASTER_REPL_PASSWORD="123"
MASTER_P="3306"
#SLAVE_PASSOWRD="123"
#多实例还没有写,需要修改路径太多。
#MULTI_SERVER_ID=
#MULTI_PORT=3307
COLOUR="echo -e \e[2;31m "
END=" \e[0m"
check_mysql(){
id mysql &> /dev/null &&{ $COLOUR "账号已存在!" $END ; return 200 ; }
[ -f ./mysql-5*.tar.gz ] || { $COLOUR "没有安装包!!" $END ; return 201 ; }
useradd -s /sbin/nologin -r mysql
return 100
}
make_mysql(){
[ -d /mysql ] && { $COLOUR "mysql目录已经存在!" $END ; return 200 ; }
mkdir -p /mysql/{data,binlog-master,binlog-slave,tmp,backup} &> /dev/null
touch /mysql/binlog-master/mysql.log
command -v yum && yum -y -q install libaio numactl-libs ncurses-compat-libs libaio-devel &> /dev/null
command -v apt && apt -y install libncurses5
tar zxf mysql-5*.tar.gz -C /mysql/ &> /dev/null
mv /mysql/mysql-5* /mysql/mysql
chown -R mysql.mysql /mysql &> /dev/null
echo "PATH=/mysql/mysql/bin:$PATH" >/etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
return 100
}
mk_master_cnf(){
[ -f /etc/my.cnf ] && mv /etc/my.cnf /etc/my.cnf`date +%F-%T`.bak &> /dev/null
server_id=`hostname -I |awk -F . '{print $4}'`
cat <<EOF >/etc/my.cnf
[client]
socket=/mysql/tmp/mysql.sock
[mysql]
socket=/mysql/tmp/mysql.sock
prompt=Master [\\d]>
[mysqld]
server_id=${server_id}
port=3306
user=mysql
pid_file=/mysql/tmp/mysql.pid
socket=/mysql/tmp/mysql.sock
basedir=/mysql/mysql
datadir=/mysql/data
log_error=/mysql/binlog-master/mysql.log
log_bin=/mysql/binlog-master/mysql-master-bin
gtid_mode=on
enforce_gtid_consistency=true
log_slave_updates=1
secure_file_priv=/mysql/tmp
EOF
return 100
}
mk_slave_cnf(){
[ -f /etc/my.cnf ] && mv /etc/my.cnf /etc/my`date +%F-%T`.cnf.bak &> /dev/null
server_id=`hostname -I |awk -F . '{print $4}'`
cat <<EOF >/etc/my.cnf
[client]
socket=/mysql/tmp/mysql.sock
[mysql]
prompt=Slave [\\d]>
socket=/mysql/tmp/mysql.sock
[mysqld]
server_id=${server_id}
port=3306
user=mysql
basedir=/mysql/mysql
datadir=/mysql/data
log_error=/mysql/binlog-master/mysql.log
pid_file=/mysql/tmp/mysql.pid
socket=/mysql/tmp/mysql.sock
#开启二进制日志
log_bin=/mysql/binlog-master/mysql-bin
#GTID开启
gtid_mode=on
enforce_gtid_consistency=true
log_slave_updates=1
#开启output
secure_file_priv=/tmp
#主从复制
master_info_file=/mysql/binlog-master/master.info
relay_log=/mysql/binlog-slave/relay-bin
relay_log_info_file=/mysql/binlog-slave/relay-log.info
#从库只读
#read-only=on
EOF
return 100
}
initialize_mysql(){
[ -f /etc/my.cnf ] && mv /etc/my.cnf /etc/my.cnf`date +%F-%T`.bak &> /dev/null
mysqld --initialize-insecure --user=mysql --basedir=/mysql/mysql --datadir=/mysql/data &> /dev/null
[ $? -eq 0 ] || { echo -e "\e[2;32m 初始化失败,请确保data目录为空!\e[0m " ; return 200 ; }
return 100
}
service_mysql(){
cat <<EOF >/etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
After=network.target
After=syslog.target
[Service]
User=mysql
Group=mysql
ExecStart=/mysql/mysql/bin/mysqld --defaults-file=/etc/my.cnf
#ExecStart=/mysql/mysql5/bin/mysqld_safe --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl start mysqld
systemctl enable mysqld &> /dev/null
return 100
}
install_mysql(){
echo -en "\e[1;32m 正在安装请稍后... \e[0m"
master_net=`echo ${MASTER_IP} | awk -F . '{print $1"."$2"."$3".%"}'`
check_mysql
[ $? -eq 100 ] || return
make_mysql
[ $? -eq 100 ] || return
initialize_mysql
[ $? -eq 100 ] || return
mk_master_cnf
[ $? -eq 100 ] || return
service_mysql
[ $? -eq 100 ] || return
sleep 5
systemctl is-active mysqld &> /dev/null
if [ $? -eq 0 ] ;then
mysqladmin password ${MASTER_PASSWORD} &> /dev/null
mysql -uroot -p${MASTER_PASSWORD} -e "grant replication slave on *.* to ${MASTER_REPL_USER}@'${master_net}' identified by '123'"
echo "mysql安装成功!"
else
echo "mysql启动失败,请查看日志!"
fi
}
install_slave(){
mk_slave_cnf
[ $? -eq 100 ] || return
systemctl restart mysqld
sleep 10
systemctl is-active mysqld
login_mysql_slave="mysql -uroot -p${MASTER_PASSWORD} "
${login_mysql_slave} <<EOF
change master to
MASTER_HOST='${MASTER_IP}',
MASTER_USER='${MASTER_REPL_USER}',
MASTER_PASSWORD='${MASTER_PASSWORD}',
MASTER_PORT=${MASTER_P},
MASTER_AUTO_POSITION=1;
start slave;
EOF
echo -e "\e[1;32m 从库配置完成!\e[0m"
return 100
}