mysql数据库简单补充

xiaofeng666 2021-11-15 原文

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文件,跳过密码登陆,关闭密码审计策略

在【mysqld】文件末尾添加以下内容: 
  skip-grant-tables
  plugin-load=validate_password.so
  validate-password=OFF
保存退出

 

 

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`
版权声明:本文为xiaofeng666原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/xiaofeng666/p/11705905.html

mysql数据库简单补充的更多相关文章

随机推荐

  1. 史上最全面的SignalR系列教程-目录汇总

    [史上最全面的SignalR系列教程]目录汇总是对整个SignalR开发系列教程的总结与整理篇,后续的更新都会 […]...

  2. 2020 东京奥运会男子百米飞人大战决赛成绩 All In One

    2020 东京奥运会男子百米飞人大战决赛成绩 All In One 奥林匹克运动会 2020 东京奥运会男子百 […]...

  3. 基于两维语义的证据推理方法研究

    1. 为什么需要进行识别框架间的转化 由于问题的不同和证据处理人员知识背景及偏好的不同,同一个证据处理人员在对 […]...

  4. 转 java面试题

    ● 简述synchronized?Object;Monitor机制; ● 简述happen-before规则 […]...

  5. 如何开始阅读ASP.NET Core源代码

    背景 当我们对ASP.Net Core内部的某些方法、类的实现感兴趣时,有很多方法可以去了解,看书,看各种文章 […]...

  6. 如何下载西瓜视频中的 blob:https 的视频下载

      方法1:在qq浏览器中,(最好不要用谷歌浏览器)   将西瓜视频,用手机方式打开,选择到视频框中,将src […]...

  7. CPU二则

    CPU二则 CPU二则 CPU二则 CPU二则 aligned load & unaligned lo […]...

  8. 将ipad作为电脑拓展屏或分屏的简单方法 – 天木星辰

    将ipad作为电脑拓展屏或分屏的简单方法 用Ipad实现电脑分屏的方法是挺简单的,但鉴于部分小白找不到合适的门 […]...

展开目录

目录导航