mysql数据库简单补充
1、只有拥有特定权限的用户才能执行特定的操作。就好像我们在现实生活中,一般没有权利进入军事禁区,除非我们被某个很有权利并且可以指定其他人进入军事基地的人赋予了进入军事禁区的权利。
命令:
GRANT privileges ON dbname.tableanme TO 'username'@'host' identified by ‘密码’;
赋权的同时并创建用户,并设置用户密码
2、ERROR 3009 (HY000): Column count of mysql.user is wrong. Expected 45, found 43. Created with MySQL 5的解决方案。
错误是由于你曾经升级过数据库,升级完后没有使用
mysql_upgrade升级数据结构造成的。
解决办法:
使用mysql_upgrade命令
root@localhost ~]# mysql_upgrade -u root -p 13456
3、创建用户:
CREATE USER 'username'@'host' [IDENTIFIED BY 'password'];
username表示要创建的用户名;
host表示被指定登录的主机名,可为指定主机的IP地址,本地用户用localhost表示;若要允许外网IP地址访问,可用通配符%表示任意IP地址。
例子:CREATE USER 'john'@'localhost' IDENTIFIED BY '123';
3.2修改用户密码
alter user 'username'@'hostname' identified by 'password'; 首次安装完msyql数据库,修改账号密码
3.3删除mysql表中的所有数据,清空表数据
delete from database.table;
4、创建数据库并指定字符集
create database dbname default charset utf8;
5、在shell环境执行MySQL命令
mysql -uroot -p -e "show character set\G;" 查看所有的字符集
6、只查看某个表内容的前10行limit 10
select uid,uname,realname,tel,email from uPwd_12306 limit 10;
7、备份原有数据库数据内容
mysqldump -uroot -p --no-create-info(不要创建create table语句) --extended-insert (使用包含几个values列表的多行insert语句,导入数据速度快) --default-character-set=latin1(按照原有字符集导出数据,这样就不会保存为乱码) dbname > 自定义.sql
8、查看字符集的变量设置
show variables like 'character_set%';
9、删除用户:
drop user '用户名'@'ip地址';
drop user命令会删除用户以及对应的权限,执行命令后你会发现mysql.user表和mysql.db表的相应记录都消失了。
10、在shell命令行执行mysql语句
mysql -uroot -psecure(密码) MF(数据库) -e 'select * from uPwd_12306(表)'
11、断开mysql的从数据库同步方法,先进入主数据库关闭二进制日志
mysql> set sql_log_bin=off;
mysql> alter table t1 engine=blackhole; 将t1表存储引擎改为黑洞,不存储数据内容
mysql>set sql_log_bin=on; 改完之后,再将bin_log日志功能开启即可
mysql乱码恢复完整过程
1):导出表结构
mysqldump –uroot --default-character-set=latin1 -d apple> appletable.sql
2):编辑appletable.sql 将latin1修改成utf8
vim appletable.sql 修改所有latin1为utf8
3):确保数据库不再更新,导出所有数据
mysqldump -uroot –p123456 --quick --no-create-info --extended-insert --default-character-set=latin1 apple>appledata.sql
参数说明:
--quick:用于转储大的表,强制mysqldump从服务器一次一行的检索数据而不是检索所有行,并输出当前cache到内存中
--no-create-info:不要创建create table语句
--extended-insert:使用包括几个values列表的多行insert语法,这样文件更小,IO也小,导入数据时会非常快
--default-character-set=latin1:按照原有字符集导出数据,这样导出的文件中,所有中文都是可见的,不会保存成乱码
4):打开appledata.sql 将SET NAME latin1 修改成SET NAME utf8
vim appledata.sql
/*!40101 SET NAMES utf8 */;
5):重新建库
mysql> create database apple default charset utf8;
6):建立表,导入我们之前导出的表的数据库
mysql –uroot –p123456 apple <appletable.sql
7):导入数据
mysql -uroot -p123456 apple <appledata.sql
编辑my.cnf文件,跳过密码登陆,关闭密码审计策略
xtrabackup工具备份mysql数据库
1、下载安装包
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/7/x86_64/Percona-XtraBackup-2.4.9-ra467167cdd4-el7-x86_64-bundle.tar
2、解压并安装
yum -y install percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
---> Package percona-xtrabackup-24.x86_64 0:2.4.9-1.el7 will be installed
--> Processing Dependency: perl(DBD::mysql) for package: percona-xtrabackup-24-2.4.9-1.el7.x86_64
报错,需要安装perl-DBD-MySQL。而perl-DBD-MySQL.x86_64 0:4.023-6.el7 安装包依赖这三个包mysql-community-common.x86_64 0:5.7.28-1.el7 mysql-community-libs.x86_64 0:5.7.28-1.el7 mysql-community-libs-compat.x86_64 0:5.7.28-1.el7。更新本机的Centos的yum源及epel源为阿里最新的yum源,备份原有的yum源。再次使用yum install percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm 进行安装即可解决依赖关系。
3、修改my.cnf文件
比如在/etc/my.cnf的[mysqld] 下添加datadir=/usr/local/mysql/data,然后重启mysql
4、全量备份
innobackupex --defaults-file=/etc/my.cnf --user=root --password=密码 --use-memory=4G /tmp/backup数据备份存放路径 &>>/tmp/db_backup.log数据备份日志输出文件
例如:innobackupex --user=root --password=P@zzw0rd /root/linshi &>>/root/linshi/db_backup.log
innobackupex --user=root --password=P@zzw0rd --no-timestamp /root/linshi/full &>>/root/linshi/db_backup.log 自定义全备文件存放目录名称为full
5、备份还原
停止mysql,删除数据:rm -rf /var/lib/mysql/*
innobackupex --copy-back /root/linshi/full
chown +R mysql.mysql /var/lib/mysql
systemctl start msyqld
mysql -uroot -p回车输入密码进行登陆即可。
6、创建增量备份和还原
使用—incremental创建增量备份
innobackupex --user=root --password=密码 --incremental /增量1路径 --incremental-basedir=全备路径 后面指定在哪个全备上进行增量备份
例如:innobackupex --user=root --password=P@zzw0rd --incremental /root/linshi/db_backup --incremental-basedir=/root/linshi/full &>>/root/linshi/db_backup.log
测试:
停止mysql,删除数据rm –rf /var/lib/mysql/*
还原增量备份
增量备份的恢复比全备要复杂一点,第一步是在所有备份目录下重做已提交的日志,如:
innobackupex --apply-log --redo-only BASE-DIR
innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1
innobackupex --apply-log BASE-DIR --incremental-dir=INCREMENTAL-DIR-2
注意:如果仅有一份增量备份,第2条语句忽然
其中BASE-DIR是指全备目录,INCREMENTAL-DIR-1是指第一次的增量备份,INCREMENTAL-DIR-2是指第二次的增量备份,以此类推。
这里要注意的是:最后一步的增量备份并没有--redo-only选项!
以上语句执行成功之后,最终数据在BASE-DIR(即全备目录)下。
第一步完成之后,我们开始第二步:回滚未完成的日志:
innobackupex --apply-log BASE-DIR
上面执行完之后,BASE-DIR里的备份文件已完全准备就绪,最后一步是拷贝:
innobackupex --copy-back BASE-DIR
恢复mysql权限 chown –R mysql.mysql /var/lib/mysql/
最后启动systemctl start mysqld
检验数据是否恢复正常
MySQL增/全量备份-percona
percona-xtrabackup 只能对本地mysql数据库进行备份,故需与被备份数据mysql安装在同一台主机上。
由于该软件只会备份数据,不会备份log_bin日志,但会显示当前备份的位置,故如用备份恢复,将需重新配置数据库 主从/主主同步。
安装包
percona-xtrabackup-2.4.9-Linux-x86_64.tar.gz:
官网下载地址:
https://www.percona.com/downloads/XtraBackup/LATEST/
软件安装
# 解压即安装
cd /data/
tar -zxvf percona-xtrabackup-2.4.9-Linux-x86_64.tar.gz
全量备份
# 创建全量备份存储文件夹
mkdir -p /data/mysql_backup/full/
# 开始备份,生成全量备份文件夹在/data/backup/2018-10-19_03-40-04/
/data/percona-xtrabackup-2.4.9-Linux-x86_64/bin/innobackupex --defaults-file=/etc/my.cnf --user=root --password=***** /data/mysql_backup/full/
# 从以上命令的日志中获取同步位置,例如如下显示为 bin_log.000002' '428234578'
MySQL binlog position: filename 'bin_log.000002', position '428234578'
180918 14:55:51 [00] Writing backup-my.cnf
180918 14:55:51 [00] ...done
180918 14:55:51 [00] Writing xtrabackup_info
180918 14:55:51 [00] ...done
xtrabackup: Transaction log of lsn (1068407093) to (1068407102) was copied.
180918 14:55:51 completed OK!
增量备份
# 创建增量备份文件夹
mkdir -p /data/mysql_backup/increment/
# --incremental表示增量备份,--incremental-basedir配置为以哪个备份为基础,可以全量为基础,也可以增量为基础。本次生成增量备份文件在:/data/mysql_backup/increment/2018-10-19_06-02-42/
innobackupex --user=root --password=***** --incremental --incremental-basedir=/data/mysql_backup/full/2018-10-19_03-40-04/ /data/mysql_backup/increment/
恢复
# 恢复前,需先停止数据库
service mysql stop
# 恢复全量备份
# 将原mysql数据文件夹改名,该路径在/etc/my.cnf datadir中有定义,以下假设原数据目录为/data/mysql/data/
mv /data/mysql/data/ /data/mysql/data_20181019
mkdir -p /data/mysql/data/
# 让备份文件夹准备恢复(同步已经提交的事务及回滚未提交的事务至数据文件)
innobackupex --defaults-file=/etc/my.cnf --user=root --password=***** --apply-log --use-memory=4G /data/mysql_backup/full/2018-10-19_03-40-04/
# 开始恢复
innobackupex --defaults-file=/etc/my.cnf --user=root --password=***** --copy-back /data/mysql_backup/full/2018-10-19_03-40-04/
# 修改权限
chown -R mysql:mysql /data/mysql/data/
# 全量+增量恢复。需执行以下命令,将增备数据全部恢复到全备文件夹中,以下假设有两次增备
# 1.让全备文件夹同步已经提交的事务至数据文件
innobackupex --apply-log --redo-only /data/mysql_backup/full/2018-10-19_03-40-04/
# 2.让增备1同步已经提交的事务至全备数据文件(--redo-only:合并已提交事务,不合并回滚事务,避免增备之间数据无法衔接)
innobackupex --apply-log --redo-only /data/mysql_backup/full/2018-10-19_03-40-04/ --incremental-dir=/data/mysql_backup/increment/2018-10-19_06-02-42/
# 3.让增备2同步已经提交的事务及回滚未提交的事务至全备数据文件,注意最后次增量不需加 --redo-only 参数
innobackupex --apply-log /data/mysql_backup/full/2018-10-19_03-40-04/ --incremental-dir=/data/mysql_backup/increment/2018-10-20_08-00-00/
# 此时该全备文件夹已包含所有增量备份数据,依次按以上全备恢复命令,可恢复数据。
启动数据库,检查数据是否OK
service mysql start
附备份脚本
#!/bin/sh
##### ###### ###### ###### ###### ###### ###### #
# 1、每7天一次全备,每天一次增量
# 2、备份保留60天
##### ###### ###### ###### ###### ###### ###### #
export PATH=$PATH:/percona/bin
INNOBACKUPEX_CMD=/percona/bin/innobackupex
MYSQL_CMD="--host=127.0.0.1 --user=root --password='********' --port=3306"
MYSQL_UP="--user=root --password='********' --port=3306 --host=127.0.0.1"
TMPLOG="/mysql_bak/backup/innobackupex.$$.log"
MY_CNF=/etc/my.cnf
BACKUP_DIR=/mysql_bak/backup
FULLBACKUP_DIR=$BACKUP_DIR/full
INCRBACKUP_DIR=$BACKUP_DIR/incre
FULLBACKUP_INTERVAL=604800
KEEP_FULLBACKUP=4
logfile=/mysql_bak/backup/logs/backup.`date +%Y%m%d%H%M`.log
STARTED_TIME=`date +%s`
echo "----------------------------"
echo "开始备份于: `date +%F' '%T' '%w`"
mkdir -p $FULLBACKUP_DIR
mkdir -p $INCRBACKUP_DIR
mkdir -p /mysql_bak/backup/logs
LATEST_FULL_BACKUP=`find $FULLBACKUP_DIR -mindepth 1 -maxdepth 1 -type d -printf "%P\n" | sort -nr | head -1`
LATEST_FULL_BACKUP_CREATED_TIME=`stat -c %Y $FULLBACKUP_DIR/$LATEST_FULL_BACKUP`
if [ "$LATEST_FULL_BACKUP" -a `expr $LATEST_FULL_BACKUP_CREATED_TIME + $FULLBACKUP_INTERVAL + 5` -ge $STARTED_TIME ] ; then
echo -e "完全备份$LATEST_FULL_BACKUP未过期,将根据$LATEST_FULL_BACKUP名字作为增量备份目录命名"
echo " "
NEW_INCRDIR=$INCRBACKUP_DIR/$LATEST_FULL_BACKUP
mkdir -p $NEW_INCRDIR
LATEST_INCR_BACKUP=`find $NEW_INCRDIR -mindepth 1 -maxdepth 1 -type d | sort -nr | head -1`
if [ ! $LATEST_INCR_BACKUP ] ; then
INCRBASEDIR=$FULLBACKUP_DIR/$LATEST_FULL_BACKUP
echo -e "增量备份将以$INCRBASEDIR作为备份基础"
echo " "
else
INCRBASEDIR=$LATEST_INCR_BACKUP
echo -e "增量备份将以$INCRBASEDIR作为备份基础"
echo " "
fi
echo "使用$INCRBASEDIR作为基础做新的增量备份."
$INNOBACKUPEX_CMD --defaults-file=$MY_CNF --use-memory=8G $MYSQL_CMD --incremental $NEW_INCRDIR --incremental-basedir $INCRBASEDIR > $TMPLOG 2>&1
else
echo "*********************************"
echo -e "正在执行全新的完全备份...请稍等..."
echo "*********************************"
$INNOBACKUPEX_CMD --defaults-file=$MY_CNF --use-memory=8G $MYSQL_CMD $FULLBACKUP_DIR > $TMPLOG 2>&1
fi
cat $TMPLOG > $logfile
if [ -z "`tail -1 $TMPLOG | grep 'innobackupex: completed OK!'`" ] ; then
echo "$INNOBACKUPEX命令执行失败:"; echo
echo -e "---------- $INNOBACKUPEX_PATH错误 ----------"
cat $TMPLOG
rm -f $TMPLOG
exit 1
fi
THISBACKUP=`awk -- "/Backup created in directory/ { split( \\\$0, p, \"'\" ) ; print p[2] }" $TMPLOG`
rm -f $TMPLOG
echo -n "数据库成功备份到:$THISBACKUP"
LATEST_FULL_BACKUP=`find $FULLBACKUP_DIR -mindepth 1 -maxdepth 1 -type d -printf "%P\n" | sort -nr | head -1`
echo -e "必须保留$KEEP_FULLBACKUP份全备和全备$LATEST_FULL_BACKUP以后的所有增量备份."
echo -e "寻找过期的全量备份文件并删除">>$logfile
for efile in $(/usr/bin/find $FULLBACKUP_DIR/ -mtime +60)
do
if [ -d $efile ]; then
rm -rf $efile
echo -e "删除过期全量备份文件:$efile" >>$logfile
elif [ -f $efile ]; then
rm -rf $file
echo -e "删除过期全量备份文件:$efile" >>$logfile
fi;
done
echo -e "寻找过期的增量备份文件并删除">>$logfile
for efile in $(/usr/bin/find $INCRBACKUP_DIR/ -mtime +60)
do
if [ -d $efile ]; then
rm -rf $efile
echo -e "删除过期增量备份文件:$efile" >>$logfile
elif [ -f $efile ]; then
rm -rf $file
echo -e "删除过期增量备份文件:$efile" >>$logfile
fi;
done
echo "完成于: `date +%F' '%T' '%w`"
exit 0
mysql数据库简单补充的更多相关文章
- mysql数据库简单一些简单操作和总结
1. mysql 数据库操作方法: 进入数据库 mysql -uroot -p 退出 quite exit 默认引擎 innodb 查看版本 select verison(); 查看时间 select ...
- python连接mysql数据库简单例子
今天用pyhton2连接本地的mysql数据库,总的来说比较简单,但还是遇到一些小问题 代码如下: # -*- coding: utf-8 -*- import os import MySQLdb i ...
- php类模块引擎PDO操作MySQL数据库简单阐述
PDO是什么呢? 通俗说就是别人写的一个“数据库操作工具类”,它非常强大,可以应对市面上几乎所有主流数据库, 具体应用时候有这样一个关系: 即,要操作某种数据,就得去“打开”对应的pdo引擎. 在ph ...
- PHP+mysql数据库简单分页实例-sql分页
前几天冷月写了一篇博文<php基础编程-php连接mysql数据库-mysqli的简单使用>,很多小伙伴在学习后都知道了php与mysql数据库的连接,今天冷月分享一个简单的分页实例 首先 ...
- MySQL 数据库 简单操作命令 (部分总结)
1.查看进程方式查看数据库 ps - ajx|grep mysql 2.登录 MySQL mysql -u用户名 -p密码 3.开启服务 sudo service mysql start 4.停止服务 ...
- mysql数据库简单入门
1.xampp 跨平台 优点:兼容性高 2. apache(服务器) 著名的集成环境(也叫集成安装包) 功能:一般在网站上运行,优点:稳定 缺点:性能上有瓶颈 nginx 优点:快 3. mysql ...
- MySQL数据库简单使用
一.入门语句: 1.连接服务器: 命令:cd 安装目录\bin mysql -uroot -p 接着输入密码 ( 具体的是:mysql -u username-p password ) 远程连接MyS ...
- mysql数据库----索引补充
1.索引 索引是表的目录,在查找内容之前可以先在目录中查找索引位置,以此快速定位查询数据.对于索引,会保存在额外的文件中. 2.索引种类 普通索引:仅加速查询 唯一索引:加速查询 + 列值唯一(可以有 ...
- MySQL数据库简单操作
title date tags layout MySQL简单操作 2018-07-16 Linux post 登录mysql mysql -h 主机名 -u 用户名 -p 查看所有数据库 show d ...
随机推荐
- 第十二篇 JavaScript(简称JS) 实现显示与隐藏
JavaScript JavaScript简称JS.JS是脚本语言,它是一种轻量级的编程语言,是可以插入HTML页面的编程代码,几乎所有现代浏览器都是支持的. 理论老师不行,我就抄袭手册上的一些关 ...
- LeetCode——回文链表
题目 给定一个链表的头节点head,请判断该链表是否为回 文结构. 例如: 1->2->1,返回true. 1->2->2->1,返回true. 15->6-> ...
- 请写出正则表达式(regex),取得下列黄色部分的字符串 TEL: 02-236-9655/9659 FAX:02-236-9654 (黄色部分即02-236-9655/9659 ) ( 测试面试题)
请写出正则表达式(regex),取得下列黄色部分的字符串 TEL: 02-236-9655/9659 FAX:02-236-9654 答: package test1; import java.uti ...
- appium 自动化测试环境搭建
最近再学习appium,把学习的过程记录下来,以防止到时候 换个电脑就不知道这么安装搭建appium环境了. 环境搭建: 0.JDK环境是必备的,这里大家自行百度, 1.安装 node 环境,前辈 ...
- 19、Firewalld防火墙
安全的考虑方向: 安全框架 OSI七层模型 硬件 机架上锁(机柜) 温度 硬件检查 网络 iptables/firewalld 仅允许公司的IP地址能连接服务器的22端口 公有云使用 安全组 系统 没 ...
- Tree HDU - 6547 (树链剖分,线段树)
wls 有三棵树,树上每个节点都有一个值 ai,现在有 2 种操作: 将一条链上的所有节点的值开根号向下取整: 求一条链上值的和: 链的定义是两点之间的最短路. Input 第一行两个数 n, q 分 ...
- js 点击不同li 切换颜色
html <div> <li " onclick='addColor(this.id)'> 会议简介 </li> <li " onclic ...
- mysql向redis导入数据
数据库结构如下 如果是linux系统下,如此整备数据 SELECT CONCAT( "*10\r\n", '$', LENGTH(redis_cmd), '\r\n',redis_ ...
- sublime开发工具各类配置和插件的安装
1.css颜色提示 惯例两步: ctrl+shift+p Install package 手动输入color Highlighter 注意,一定要手动输入,复制粘贴回车会没有反应,一般手动输入colo ...
- zabbix-server一键部署
最近想写一个zabbix脚本,自己尝试几次,能够实现,但是太糙了,在github上发现一个很好,谢谢作者脚本作者:火星小刘 web:www.huoxingxiaoliu.com email:xtlyk ...