python学习道路(day12note)(mysql操作,python链接mysql,redis)
1,针对mysql操作
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass'); 设置密码
update user set password=passworD("test") where user='root';修改密码
flush privileges;
grant all on *.* to root@'%' identified by 'your_password';
mysql> select user,password,host from mysql.user;
+------+-------------------------------------------+-----------+
| user | password | host |
+------+-------------------------------------------+-----------+
| root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | localhost |
| root | | 127.0.0.1 |
| root | | ::1 |
| | | localhost |
| repl | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 10.0.5.44 |
| root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 10.0.5.44 |
+------+-------------------------------------------+-----------+
当设定密码后,如果要想更改密码如何操作呢?
mysqladmin -u root -p password "
Enter password:
输入原来root的密码就可以更改密码了。
【连接数据库】
刚刚讲过通过使用mysql -u root -p 就可以连接数据库了,但这只是连接的本地的数据库’localhost’,然后有很多时候都是去连接网络中的某一个主机上的mysql。
mysql -u user1 -p –P 3306 -h 10.0.2.69
其中-P(大写)指定远程主机mysql的绑定端口,默认都是3306;-h指定远程主机的IP
3. 查看某个表的字段
mysql> desc func; //func 是表名
+-------+------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------------------+------+-----+---------+-------+
| name | char(64) | NO | PRI | | |
| ret | tinyint(1) | NO | | 0 | |
| dl | char(128) | NO | | | |
| type | enum('function','aggregate') | NO | | NULL | |
+-------+------------------------------+------+-----+---------+-------+
4. 查看某个表的表结构(创建表时的详细结构)
mysql> show create table func;
|Table | CreateTable |
| func | CREATE TABLE `func` (
`name` char(64) collate utf8_bin NOT NULL default '',
`ret` tinyint(1) NOT NULL default ',
`dl` char(128) collate utf8_bin NOT NULL default '',
`type` enum('function','aggregate') character set utf8 NOT NULL,
PRIMARY KEY (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='User defined functions' |
+-------+----------------------------------------------------------------------------------------------------------------------
5. 查看当前是哪个用户
mysql> select user();
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
6. 查看当前所在数据库
mysql> select database();
+------------+
| database() |
+------------+
| mysql |
+------------+
7. 创建一个新库
mysql> create database db1;
Query OK, 1 row affected (0.04 sec)
8. 创建一个表
mysql> create table t1 ( `id` int(4), `name` char(40));
Query OK, 0 rows affected (0.02 sec)
mysql> desc t1;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(4) | YES | | NULL | |
| name | char(40) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
9. 查看当前数据库版本
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.0.86 |
+-----------+
10. 查看当前系统时间
mysql> select current_date, current_time;
+--------------+--------------+
| current_date | current_time |
+--------------+--------------+
| 2011-05-31 | 08:52:50 |
+--------------+--------------+
11. 查看当前mysql的状态
mysql> show status;
+-----------------------------------+----------+
| Variable_name | Value |
+-----------------------------------+----------+
| Aborted_clients | 0 |
| Aborted_connects | 1 |
| Binlog_cache_disk_use | 0 |
| Binlog_cache_use | 0 |
| Bytes_received | 664 |
| Bytes_sent | 6703 |
这个命令打出很多东西,显示你的mysql状态。
12. 查看mysql的参数
mysql> show variables;
很多参数都是可以在/etc/my.cnf中定义的。
13. 创建一个普通用户并授权
mysql> grant all on *.* to user1 identified by ';
Query OK, 0 rows affected (0.01 sec)
all 表示所有的权限(读、写、查询、删除等等操作),*.*前面的*表示所有的数据库,后面的*表示所有的表,identified by 后面跟密码,用单引号括起来。这里的user1指的是localhost上的user1,如果是给网络上的其他机器上的某个用户授权则这样:
mysql> grant all on db1.* to ';
Query OK, 0 rows affected (0.00 sec)
用户和主机的IP之间有一个@,另外主机IP那里可以用%替代,表示所有主机。例如:
mysql> grant all on db1.* to ';
Query OK, 0 rows affected (0.00 sec)
【一些常用的sql】
1. 查询语句
mysql> select count(*) from mysql.user;
mysql.user表示mysql库的user表;count(*)表示表中共有多少行。
mysql> select * from mysql.db;
查询mysql库的db表中的所有数据
mysql> select db from mysql.db;
查询mysql库db表的db段。
mysql> select * from mysql.db where host like '10.0.%';
查询mysql库db表host字段like 10.0.% 的行,这里的%表示匹配所有,类似于前面介绍的通配符。
2. 插入一行
mysql> insert into db1.t1 values (1, 'abc');
Query OK, 1 row affected (0.00 sec)
t1表在前面已经创建过。
mysql> select * from db1.t1;
+------+------+
| id | name |
+------+------+
| 1 | abc |
+------+------+
3. 更改某一行
mysql> update db1.t1 set name='aaa' where id=1;
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0
这样就把原来id为1的那行中的name改成’aaa’
4. 删除表
mysql> drop table db1.t1;
Query OK, 0 rows affected (0.01 sec)
5. 删除数据库
mysql> drop database db1;
Query OK, 0 rows affected (0.07 sec)
6. 备份与恢复库
mysqldump -uroot -p mysql >mysql.sql
这里的mysqldump 就是备份的工具了,-p后面的mysql指的是mysql库,把备份的文件重定向到mysql.sql。如果恢复的话,只要:
mysql -uroot -p mysql < mysql.sql
2.python链接数据库并执行备份
import pymysql
import os, sys, tarfile, datetime, re, time, subprocess
Date = time.strftime('%Y%m%d_%H-%M')
print(Date)
flage = None
Flage = None
class mysql_backup(object):
def __init__(self,res,host,user,pwd,gamedb,path):
self.res = res
self.host = host
self.user = user
self.pwd = pwd
self.gamedb = gamedb
self.path = path
def connect(self):
f = open(self.path + "errlog_db.log","a+",encoding="utf-8")
try:
conn = pymysql.connect(host=self.host, user=self.user, passwd=self.pwd, db=self.gamedb)
print("connect ok")
global flage
flage = True
except Exception as e:
f.write(Date + ':' + 'connect to mysqldb error!!!' + '\n')
sys.exit()
conn.close()
f.close()
def sqlfile(self):
global flage, Flage
if flage:
f = open(self.path + "errlog_db.log", "a+", encoding="utf-8")
try:
os.system('%s -u%s -p%s -h%s %s >> %sgamedb.sql' % (self.res,self.user,self.pwd,self.host,self.gamedb,self.path))
tarsql = tarfile.open( self.path + Date + '.tar', 'w')
tarsql.add(self.path + 'gamedb.sql',arcname= Date + ".gamedb.sql")
tarsql.close()
Flage = True
print("sqlfile ok %s" % self.user)
except Exception as e:
f.write(Date + ':' + 'sqlfile to tar error!!!' + '\n')
sys.exit()
f.close()
def refile(self):
global flage, Flage
if flage and Flage:
if os.path.isfile(self.path + 'gamedb.sql'):
os.system("rm -f" + " " + self.path + "gamedb.sql")
print("refiel ok")
def errlog(self):
if os.path.isdir(self.path) is False:
os.makedirs(self.path)
print("path ok")
if os.path.isfile(self.path + 'errlog_db.log') is False:
os.system("touch" + " " + self.path + "errlog_db.log")
print("errlog ok")
def oldfile(self):
settime= (datetime.datetime.now() - datetime.timedelta(days=1)).strftime('%Y%m%d') #获取到30天前的时间
settime = int(settime)
for dirpath,dirnames,filenames in os.walk(self.path):
for file in filenames:
if file != 'errlog_db.log':
filetime = time.strftime('%Y%m%d', time.localtime(os.stat(self.path + file).st_ctime)) #获取文件时间
filetime = int(filetime)
print(file)
if settime == filetime:
os.remove(self.path + file)
#需要你手动更改打开的文件位置,注意#行需要更改
def config():
file = open("start", "r", encoding="utf-8") #打开文件位置
host = re.findall(r'-db_host="(\w.*?)"', file.read())
str_host = ''.join(host)
file.close()
file = open("start","r",encoding="utf-8")
dbname = re.findall(r'-db_name="(\w.*?)"',file.read()) #打开文件位置
str_dbname = ''.join(dbname)
file.close()
res = subprocess.Popen("which mysqldump", shell=True, stdout=subprocess.PIPE)
res = res.stdout.read().decode().strip()
parameter = mysql_backup(res,str_host,',str_dbname,r'/data/backup_db/') #用户,密码需要更改,路径
parameter.errlog()
parameter.connect()
parameter.sqlfile()
parameter.refile()
parameter.oldfile()
if __name__ == "__main__":
config()
3.redis操作。。。。
python学习道路(day12note)(mysql操作,python链接mysql,redis)的更多相关文章
- Python学习入门基础教程(learning Python)--5.6 Python读文件操作高级
前文5.2节和5.4节分别就Python下读文件操作做了基础性讲述和提升性介绍,但是仍有些问题,比如在5.4节里涉及到一个多次读文件的问题,实际上我们还没有完全阐述完毕,下面这个图片的问题在哪呢? 问 ...
- Python学习课程零基础学Python
python学习课程,零基础Python初学者应该怎么去学习Python语言编程?python学习路线这里了解一下吧.想python学习课程?学习路线网免费下载海量python教程,上班族也能在家自学 ...
- Python学习系列(四)Python 入门语法规则2
Python学习系列(四)Python 入门语法规则2 2017-4-3 09:18:04 编码和解码 Unicode.gbk,utf8之间的关系 2.对于py2.7, 如果utf8>gbk, ...
- 【Python学习之十】操作数据库
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 python3.6 操作mysql数据库 1.安装pymysql模块p ...
- [Python学习笔记][第七章Python文件操作]
2016/1/30学习内容 第七章 Python文件操作 文本文件 文本文件存储的是常规字符串,通常每行以换行符'\n'结尾. 二进制文件 二进制文件把对象内容以字节串(bytes)进行存储,无法用笔 ...
- Python学习杂记_3_字符串操作的常用方法
字符串操作 字符串是可以通过下标来进行取值的,但是由于字符串是不可变变量,不能通过下标来修改它的值(形式如 字符串[下标]),下标从0开始,最大下标值是字符串长度减1,即len(string)-1 P ...
- 【Python学习之六】文件操作
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 python3.6 一.文件的打开与关闭 使用open函数,可以打开一 ...
- python学习1-博客-DB操作类
#学习python,准备写一个博客,第一天:在别人代码基础上写一个数据库操作的db.py1)python代码 #!/usr/bin/env python # -*- coding: UTF-8 -*- ...
- 【Python学习笔记】字符串操作
字符串的表示 python中的字符串是一个常量,可以使用单引号'',双引号""或三引号""" """来创建一个字符串常量 ...
随机推荐
- PHP的单态类——为了产生唯一的对象
pdo就是使用了单态类,使得对象永远只实例化一次,减少了内存消耗. 单态类: <?php class A{ private static $a = null; private function ...
- MySQL学习笔记(1/2)
数据库的学习要求:1.为项目设计表:2.使用SQL(Structure Query Language)语句(SQL编程).其他的都可以使用工具完成. SQL: DDL:创建库.创建表 DML:对数据的 ...
- sublime text3 输入中文的解决方法
1. 下载我们需要的文件,打开终端 ,输入: git clone https://github.com/lyfeyaj/sublime-text-imfix.git 2. 将下载的文件解压之后,移到当 ...
- 史上最简单,一步集成侧滑(删除)菜单,高仿QQ、IOS。
重要的话 开头说,not for the RecyclerView or ListView, for the Any ViewGroup. 本控件不依赖任何父布局,不是针对 RecyclerView. ...
- 关于readonly修饰符
修饰字段: 1.值类型:不能修改值 2.引用类型:是指该字段引用的对象不可以修改,但是里面的内容是可以修改的! 示例: static void Main(string[] args) { Consol ...
- js验证输入的金钱格式
<html> <head> <title>js验证输入的金钱格式</title> <script type="text/javascri ...
- jquery跳出each循环
答案是使用 return false; 切记哦,不是使用break;也不是直接使用return; jQuery中each类似于javascript的for循环 但不同于for循环的是在each里面不 ...
- Python学习笔记(五)——list和tuple
一.list 1.定义: list是一种有序的集合,可以随时添加和删除其中的元素 2.声明方法: subjects=['Math','English', 'Chinese'] 3.一些api (1)获 ...
- Spring快速入门
什么是Spring Spring是分层的JavaSE/EE full-stack(一站式) 轻量级开源框架 分层 SUN提供的EE的三层结构:web层.业务层.数据访问层(持久层/集成层) Strut ...
- CodeChef - QCHEF 分块
题目链接:http://vjudge.net/problem/174774/origin 题意:给定一个长度为n的序列a[],序列的值不大于m,现在有k个询问,每个询问给定(l,r).让你求出max{ ...