分类 Mysql 下的文章

我的个人博客:逐步前行STEP

示例:
1、将文章按类型的分组,并获取类型分组中最新的一篇文章

select author,max(`updated_at`) as updated_at from articles 
    group by category_id
    order by updated_at desc

2、将文章按类型的分组,并获取类型分组中阅读量最小的一篇文章

select author,min(`read_cnt`) as read_cnt from articles 
    group by category_id
    order by read_cnt

我的个人博客:逐步前行STEP

1、在配置文件添加:

innodb_force_recovery = 1;

2、重启mysql服务:service mysqld restart
3、登陆mysql,导出数据库
4、删除ibdata1、ib_logfile0、ib_logfile1文件和databasename(数据库名字)目录
5、注释掉第一步的配置:innodb_force_recovery = 1
6、重启mysql服务:service mysqld restart
7、登陆mysql,重建数据库,导入备份

首先写一个备份脚本:

backup.sh

#!/bin/bash
#设置文件名中的时间格式
date=`date +%Y_%m_%d`
#mysqldump命令需使用绝对路径否则无法正确执行
/usr/local/mysql/bin/mysqldump -uusername -ppassword database | gzip > /home/mysql/backup/database_$date.sql.gz

添加可执行权限:

chmod +x backup.sh

添加定时执行脚本:

#每日0点执行备份
0 0 * * * root /bin/bash /home/mysql/backup.sh

配置Mysql主从可以做热备、读写分离,是提高网站性能、提高数据安全性的比较有效的方式,而且配置简单,所以笔者在网站因业务逻辑需要大量用到数据库操作而性能不佳时,首先想到要做主从,其实还有别的方案的,比如做缓存,但是做缓存要改代码所以等之后再应用,先把主从给配置了。以下是做Mysql主从的关键步骤:
1、准备两个服务器,并且配置并启动同版本的mysql服务,其中,一个主(master)一个从(slave);
2、在master数据库中创建数据库,并将数据库同步到slave数据库,这里我采用了在master中导出sql文件然后在slave中通过scp命令获取后导入的方式;
3、在master中配置一个slave访问账户:

GRANT REPLICATION SLAVE ON *.* TO 'slave'@'52.80.193.101' IDENTIFIED BY 'password';

4、在master数据库配置中添加以下配置:

server-id=1
log-bin=mysql-bin --开启日志,并将二进制日志文件设置为mysql-bin
max_binlog_size=104857600--日志文件的最大尺寸
binlog_format=mixed
binlog-do-db=test --这里配置了需要同步的数据库,如果未配置则表示同步所有数据库
binlog-ignore-db=mysql--这里配置了不需要同步的数据库

5、在slave数据库中添加以下配置:

server-id=2
log-bin=mysql-bin
replicate-same-server-id 
replicate-do-db=blog=test -- 指定要同步的数据库
replicate-ignore-db=mysql -- 指定不需要同步的数据库

6、在slave数据库中执行以下命令:

change master to master_host='52.80.193.101',master_user='slave',master_password='password'

7、分别查看master、slave状态:

show master status;--查看master状态,如果之前没有开启二进制日志的话这里显示空,如果已经开启,会有File、Position、Binlog_Do_DB、Binlog_Ignore_DB等字段
-----
show slave status; --查看slave状态,会显示之前的一些配置信息和一些默认信息

8、测试:
1)现在master中创建一个数据表:

create table test_(id int(11));

2)在slave中test数据库下查看是否有test_表

show tabes like 'test_';

如果有则说明test_表同步过来了,即主从复制配置成功!

1、创建用户:


CREATE USER 'username'@'host' IDENTIFIED BY 'password';

2、程序中使用的mysql账号应该遵循最小权限原则,不允许夸库查询,故设置专门的账号供程序使用:


grant select,update,delete,insert on database_name.* to 'username'@'%' identified by 'passwd' with grant option;

设置对一个数据库的全部权限:
grant all privileges on database_name.* to 'username'@'%' identified by 'passwd' with grant option;    

3、设置完后将权限信息从内存中写入数据库:


flush privileges;

4、取消用户权限:


revoke all on *.* from username;