分配物理内存的70%,ip(后二位)+3306 作为server-id
cat mysql57.spec <<
Name: mysql
Version: 5.7.29
Release: 1%{?dist}
License: GPL
URL: http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-boost-5.7.29.tar.gz
Group: applications/database
Source: mysql-5.7.29.tar.gz
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
BuildRequires: cmake /sbin/useradd /sbin/groupadd /bin/bash /bin/sh /bin/chown
Requires: gcc,make,gcc-c++,cmake,ncurses,ncurses-devel,bzip2-devel,python-devel,python-libs,bzip2,libicu-devel,libaio,autoconf
Packager: bin.song@dianrong.com
Autoreq: no
#Source: %{name}-%{version}.tar.gz
prefix: /data/mysql
Summary: MySQL 5.7.29
%description
The MySQL(TM) software delivers a very fast, multi-threaded, multi-user,
and robust SQL (Structured Query Language) database server. MySQL Server
is intended for mission-critical, heavy-load production systems as well
as for embedding into mass-deployed software.
%define MYSQL_USER mysql
%define MYSQL_GROUP dba
%prep
%setup -n mysql-%{version}
%build
cmake -DCMAKE_INSTALL_PREFIX=%{prefix} \
-DMYSQL_DATADIR=/data/my3306 \
-DWITH_BOOST=../boost_1_59_0 \
-DSYSCONFDIR=/data/my3306 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci
make -j cat /proc/cpuinfo | grep processor| wc -l
%install
rm -rf %{buildroot}
make install DESTDIR=%{buildroot}
cp %{_sourcedir}/my.cnf $RPM_BUILD_ROOT%{prefix}/
cp -r %{_sourcedir}/local $RPM_BUILD_ROOT%{prefix}/
%pre
if [ $1 == 1 ];then
groupadd -g 510 dba
useradd -u 509 -d /home/mysql -g dba mysql
mkdir -p /data/my3306/{data,run,log,tmp}
cat > /home/mysql/.bash_profile << EOF
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH=.:\$PATH:/usr/local/bin;
export PATH=\$PATH:\$HOME/bin:/data/mysql/bin:/data/mysql/local/bin:/usr/local/bin
export MYSQL_HOME=/data/my3306 && source dbrole.sh
alias mysql='mysql -udbadmin -palipswxx -S \$MYSQL_HOME/run/mysql.sock'
alias dbs='source /data/mysql/local/bin/dbs && source /data/mysql/local/bin/dbrole.sh'
alias mysqld_mm='mysqld_safe --defaults-file=\$MYSQL_HOME/my.cnf &'
alias mysqld_ms='mysqld_safe --defaults-file=\$MYSQL_HOME/my.cnf --read-only=1 &'
export LANG=en_US.UTF-8
alias alert='tail -100f \$MYSQL_HOME/log/alert.log'
PORTS=3306
NUM_INST=1
EOF
chown -R mysql.dba /data/my* && chown -R mysql.dba /home/mysql/.*
fi
%post
if [ $1 == 1 ];then
if [ -f "/etc/my.cnf" ];then
mv /etc/my.cnf /etc/my.cnf.bak
fi
server_id=`ip addr | grep inet | grep "255 scope global" |head -1| awk '{print $2}'|cut -d "/" -f 1|cut -d "." -f 3,4 | tr -d "."`"3306"
mem_total=`free -g | awk '/Mem/ {print $2}'` && innodb_buffer=`awk 'BEGIN{printf "%.d\n",'$mem_total' * 0.7}'`"G"
cp %{prefix}/my.cnf /data/my3306/ && sed -i 's/123456/'${server_id}'/g' /data/my3306/my.cnf && sed -i 's/4G/'${innodb_buffer}'/g' /data/my3306/my.cnf&& ln -snf /data/my3306/my.cnf /etc/my.cnf
chown -R mysql.dba /data/my*
/data/mysql/bin/mysqld --defaults-file=/data/my3306/my.cnf --basedir=/data/mysql --datadir=/data/my3306/data --user=mysql --initialize && chmod -R 755 /data/my3306/*
ln -s %{prefix}/lib %{prefix}/lib64
pass=`awk '/password/{print $NF}' /data/my3306/log/alert.log | tail -1 `
su - mysql -c "/data/mysql/bin/mysqld_safe --defaults-file=/data/my3306/my.cnf --user=mysql &"
CONNECTED=$(netstat -alnt | grep -c ":3306 ")
for (( i=0;i<10;i++))
do
if [ ${CONNECTED} -eq 0 ]; then
echo "MYSQL NOT CONNECTED YET";
sleep 2;
else
echo "MYSQL IS Running";
break;
fi
done
ln -snf /data/mysql/bin/* /usr/bin/
sql="/data/mysql/bin/mysql --connect-expired-password -uroot -p'${pass}' -S /data/my3306/run/mysql.sock"
echo -e "set password = password('${pass}');\
GRANT ALL PRIVILEGES ON *.* TO 'dbadmin'@'localhost' IDENTIFIED BY PASSWORD '*0C3A6A26A43FECD19F8521DD56FEC2221B8A7609';\
GRANT ALL PRIVILEGES ON *.* TO 'dbadmin'@'127.0.0.1' IDENTIFIED BY PASSWORD '*0C3A6A26A43FECD19F8521DD56FEC2221B8A7609';\
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'10.%' IDENTIFIED BY PASSWORD '*8111075AFC83F9ACE58F1EA7AA7CB074BA7F4DE6378' WITH GRANT OPTION;\
GRANT SELECT, RELOAD, PROCESS, SUPER, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'databak'@'127.0.0.1' IDENTIFIED BY PASSWORD '*FADFCF8A2AA8F018AEED621B2F3E1A4992E5D71D';\
FLUSH PRIVILEGES;\
RESET MASTER;"|eval ${sql}
fi
%preun
userdel -r mysql >/dev/null 2>&1
%files
%defattr(-, %{MYSQL_USER}, %{MYSQL_GROUP})
%attr(755, %{MYSQL_USER}, %{MYSQL_GROUP}) %{prefix}/*
%changelog
网友评论