标签: mysql

  • Linux mysql数据库每天0点自动备份

    通过定时任务实现每天0点整备份数据,并保存最近30天的备份,过期自动删除。

    第一步新建 my_dump.cnf 配置文件

    my_dump.cnf配置文件用于储存数据库账号密码,在此以root为例,内容如下

    [mysqldump]
    #备份用户
    user=root
    #备份用户密码
    password=root

    第二部新建脚本文件

    内容如下:

    #!/bin/bash
    DB_NAME='demo1' #要备份的数据库
    BACKUP_DIR='/data/backup/mysqldata/' # 备份保存目录
    CURRENT_TIME=`date +%Y%m%d%H%M`
    FILEPATH=$BACKUP_DIR$DB_NAME'_'$CURRENT_TIME'.sql.gz'
    echo '开始导出数据库...'
    #defaults-extra-file=/root/my_dump.cnf 第一步的配置文件路径
    mysqldump --defaults-extra-file=/root/my_dump.cnf $DB_NAME | gzip > $FILEPATH
    #删除30天前的配置文件
    find ${BACKUP_DIR} -mtime +30 -name "${DB_NAME}_*.sql.gz" -exec rm -f {} \;
    echo '导出成功,文件名为: '$FILEPATH

    第三步添加定时任务

    执行命令:crontab -e

    写入以下内容:

    0 0 * * *       /data/crontab/database_backup.sh #每天0点0分备份数据库

    至此数据库自动备份已配置完成!

    注意事项

    确认cron任务是启动状态,以Centos7 为例 输入 systemctl status crond 显示绿色状态

    输入crontab -l  确认你输入的内容已保存

  • Mysql的联合索引

    Mysql联合索引又叫复合索引,就是一个覆盖表中两列或者以上的索引,例如WordPress的Posts表联合索引如下

    type_status_date(post_type, post_status, post_date, ID)

     

    创建联合索引

    1.执行alter table语句时创建

    alter table table_name add index index_name(column_list)

    index_name是创建的联合索引的名字,可以没有,没有的话系统会根据该索引包含的第一列来赋名称;table_name是要创建该索引的表名;column_list为该索引所包含的表的字段名。

     

    2.执行create index语句时创建

    create index index_name on table_name(column_list)
    此种情况是在表已经创建好的情况下,再来创建复合索引。index_name和column_list同上;table_name是要创建索引的表名。

    例子
    create table test
    (
    id int,
    name varchar(10),
    age int,
    primary key(id)
    );
    ALTER TABLE stu ADD INDEX NameAge (name,age);
    或使用
    create index NameAge on test(name,age);

    执行上面的语句后在表test中就创建好了一个名叫NameAge联合索引,在使用联合索引的时候,我们遵守一个最左原则,即索引 NameAge (name,age)支持name|name age组合查询,而不支持age查询;换句话说,在执行

    select * from test where name=?
    或使用

    select * from test where name=? and age=?
    时联合索引才会有效,如果执行

    select * from test where age=?
    则联合索引不会生效

     

    如果我们是在name和age上分别创建单个索引的话,由于mysql查询每次只能使用一个索引,所以虽然这样已经相对不做索引时全表扫描提高了很多效率,但是如果在name、age两列上创建复合索引的话将带来更高的效率。如果我们创建了(name, age)的复合索引,那么其实相当于创建了(name)、(name,age)两个索引,这被称为最佳左前缀特性。

    因此我们在创建复合索引时应该将最常用作限制条件的列放在最左边,依次递减。

    注意事项

    只要列中包含有NULL值都将不会被包含在索引中
    复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的,所以我们在数据库设计时尽可能不要让字段的默认值为NULL。

  • Centos7.4 编译安装Mysql 5.7.21 配置开机启动

    Centos7.4 编译安装Mysql 5.7.21 配置开机启动

    Centos7.4 编译安装Mysql 5.7.21数据库,加添服务并 配置开机启动。使用yum安装的Mysql一般版本比较旧,如果想要尝试最新的功能或者需要指定特殊的功能的话,就需要手工进行编译安装了。

    一、下载Mysql boost

    下载源码
    https://dev.mysql.com/downloads/mysql/
    1.在Select Operating System:选择Source Code
    2.在下面的Select OS Version:选择Generic Linux (Architecture Independent);
    3.然后再下面的部分可以看到Compressed TAR Archive,单击后面的Download;
    4.在最下面的No thanks, just start my download.就是下载地址了

    wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.21.tar.gz

    二、下载boost

    Mysql5.7 要求boost的版本1.59

    wget --no-check-certificate http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz

    三、安装依赖

    yum install -y cmake bison bison-devel libaio-devel gcc gcc-c++ git  ncurses-devel

    四、解压mysql源文件

    tar -zxvf mysql-5.7.21.tar.gz

    五、进入Mysql源文件目录,新建configure做为编译目录,并进入该目录

    cd mysql-5.7.21
    mkdir configure
    cd configure

    六、使用cmake进行生成编译环境

    -DCMAKE_INSTALL_PREFIX mysql安装目录
    -DMYSQL_DATADIR 数据库文件没有了
    -DSYSCONFDIR 配置文件目录(配置文件需要自己创建)
    -DMYSQL_UNIX_ADDR sock目录 春风这里使用/dev/shm(物理内存目录)
    -DWITH_BOOST= boost源码文件
    -DEXTRA_CHARSETS 安装所字符集 可以用all安装所有扩展字符集
    -DDEFAULT_CHARSET 使用utf8字符
    -DDEFAULT_COLLATION 校验字符

    cmake .. -DCMAKE_INSTALL_PREFIX=/data/apps/mysql \
    -DMYSQL_DATADIR=/data/apps/mysql/data \
    -DSYSCONFDIR=/data/apps/conf/mysql/etc \
    -DWITH_MYISAM_STORAGE_ENGINE=1 \
    -DWITH_INNOBASE_STORAGE_ENGINE=1 \
    -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
    -DMYSQL_UNIX_ADDR=/dev/shm/mysql.sock \
    -DMYSQL_TCP_PORT=3306 \
    -DENABLED_LOCAL_INFILE=1 \
    -DWITH_PARTITION_STORAGE_ENGINE=1 \
    -DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \
    -DDEFAULT_CHARSET=utf8 \
    -DDEFAULT_COLLATION=utf8_general_ci \
    -DWITH_DEBUG=0 \
    -DMYSQL_MAINTAINER_MODE=1 \
    -DWITH_SSL:STRING=bundled \
    -DWITH_ZLIB:STRING=bundled \
    -DDOWNLOAD_BOOST=1 \
    -DWITH_BOOST=/root/boost_1_59_0.tar.gz
    

    如果编译出现错误,请先删除CMakeCache.txt后,再重新编译

    rm -rf CMakeCache.txt

    如果出现下面的提示就表示成功生成了编译环境

    -- Configuring done
    -- Generating done

    七、使用make进行编译

    make && make install

    八、初始化数据库

    1.新建www用户组

    groupadd www

    2.新建mysql用户

    useradd -g www mysql -s /sbin/nologin

    3.新建数据库文件夹、日志文件夹、配置文件文件夹,并更改用户为mysql

    mkdir -p /data/apps/mysql/data  /data/apps/log/mysql /data/apps/conf/mysql/etc
    chown -R mysql:www /data/apps/mysql /data/apps/log/mysql /data/apps/conf/mysql
    

    4.创建配置文件

    vim /data/apps/conf/mysql/etc/my.cnf

    加入以下内容

    [mysqld]
    port = 3306
    socket = /dev/shm/mysql.sock
    basedir = /data/apps/mysql
    datadir = /data/apps/mysql/data
    log_error = /data/apps/log/mysql/error.log

    5.配置MySQL环境变量

    vim /etc/profile
    export PATH=/data/apps/php/bin:/data/apps/php/sbin:$PATH
    #改为
    export PATH=/data/apps/php/bin:/data/apps/php/sbin:/data/apps/mysql/bin:$PATH
    #让变量生效
    source /etc/profile
    

    6.初始化数据库

    /data/apps/mysql/bin  --initialize --user=mysql

    九、复制启动脚本 配置开机启动

    1.复制启动脚本

    cp /data/apps/mysql/support-files/mysql.server /etc/init.d/mysql

    2.修改脚本

    vim /etc/init.d/mysql

    找到以下两行

    basedir=
    datadir=

    改为

    basedir=/data/apps/mysql/
    datadir=/data/apps/mysql/data

    3.给脚本可执行权限

    chmod +x /etc/init.d/mysql

    4.启动Mysql数据库

    systemctl start mysql

    5.设为开机启动

    systemctl enable mysql

    十、修改Mysql 初始密码

    1.获取初始密码

    cat /root/.mysql_secret
    !n1,lI1og4Sy
    

    2.使用初始密码登陆Mysql

    mysql -uroot -p

    3.修改root密码

    mysql> alter user 'root'@'localhost' identified by '密码';

    4.重启Mysql

    systemctl restart mysql

    Mysql启动、停止、重启命令

    #启动
    systemctl start mysql
    #停止
    systemctl stop mysql
    #重启
    systemctl restart mysql