Mysql分区存储(类似接近pgsql表继承分区)

CREATE TABLE `employees_range_timestamp` (
  `emp_no` INT NOT NULL,
  `birth_date` DATE NOT NULL,
  `first_name` VARCHAR(14) NOT NULL,
  `last_name` VARCHAR(16) NOT NULL,
  `gender` ENUM('M','F') NOT NULL,
  `hire_date` TIMESTAMP NOT NULL
) 
PARTITION BY RANGE(UNIX_TIMESTAMP(hire_date))(    
    PARTITION p0 VALUES LESS THAN ( UNIX_TIMESTAMP('1960-12-31 00:00:00') ),
    PARTITION p1 VALUES LESS THAN ( UNIX_TIMESTAMP('1970-12-31 00:00:00') ),
    PARTITION p2 VALUES LESS THAN ( UNIX_TIMESTAMP('1980-12-31 00:00:00') ),
    PARTITION p3 VALUES LESS THAN ( UNIX_TIMESTAMP('1990-12-31 00:00:00') ),
    PARTITION p4 VALUES LESS THAN ( UNIX_TIMESTAMP('2020-12-31 00:00:00') )
);

之前写项目Mysql库已经超过2T,基础知识不扎实,傻乎乎的写了一堆代码实现自动分表拆成了600个分表(而且还在继续增加中。。。。。),现在项目已经运行起来了想再修改似乎来不及了。。。。

想转pgsql也头大得等老板拍板了才能搞动业务逻辑了。

奇怪的安装mysql脚本之一

groupadd mysql -g 27

useradd mysql -u 27 -g 27 -c "MySQL Server" -d /home/mysql -m

function代码

function install_mysql() {
groupadd mysql
useradd -s /sbin/nologin -M -g mysql mysql
 if [ -n "$1" ] ;  then  mysqlrootpwd=$1; else mysqlrootpwd=`openssl rand -base64 32| tr -dc _A-Z-a-z-0-9 | head -c12`;  fi
echo root $mysqlrootpwd ' | ' `date`  >> /root/mysql.txt
yum -y -q install mariadb mariadb-server galera
ln -s /usr/lib/systemd/system/mariadb.service /usr/lib/systemd/system/mysql.service
systemctl enable mariadb
systemctl start mariadb
mysqladmin -u root password $mysqlrootpwd
setmyqlroot $mysqlrootpwd
sed -i 's/skip-locking/skip-external-locking/g' /etc/my.cnf
}
function setmyqlroot() {
 if [ -n "$1" ] ;  then  mysqlrootpwd=$1; else mysqlrootpwd=`openssl rand -base64 32| tr -dc _A-Z-a-z-0-9 | head -c12`; echo root $mysqlrootpwd ' | ' `date`  >> /root/mysql.txt ;  fi
mysql -uroot -p$mysqlrootpwd <<EOF
UPDATE mysql.user SET Password=PASSWORD("$mysqlrootpwd") WHERE User='root';
DELETE FROM mysql.user WHERE User='';
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
FLUSH PRIVILEGES;
exit
EOF
}

执行安装

install_mysql()


mysql_install_db --user=mysql --datadir=/home/mysql --no-defaults  &

mysqladmin -u root password $mysqlrootpwd