Python MySQL数据库5:MySQL高级知识&账户管理&主从同步配置(下)

简介: Python MySQL数据库5:MySQL高级知识&账户管理&主从同步配置
  • 3.6、 索引的使用 (数据很大,且经常用,我们就建立索引)
  • 查看索引


show index from 表名;
  • 创建索引
    (1)、如果指定字段是字符串,需要指定长度,建议长度与定义字段时的长度一致
    (2)、字段类型如果不是字符串,可以不填写长度部分


create index 索引名称 on 表名(字段名称(长度))
  • 删除索引:


drop index 索引名称 on 表名;
  • 3.7、索引 demo 测试
  • (1)、创建测试表testindex


create table test_index(title varchar(10));
  • (2)、使用python程序(ipython也可以)通过pymsql模块 向表中加入十万条数据


from pymysql import connect
def main():
     # 创建Connection连接
     conn = connect(host='localhost',port=3306,database='jing_dong',user='root',password='mysql',charset='utf8')
     # 获得Cursor对象
     cursor = conn.cursor()
     # 插入10万次数据
     for i in range(100000):
         cursor.execute("insert into test_index values('ha-%d')" % i)
         # 提交数据
     conn.commit()
if __name__ == "__main__":
     main()
  • (3)、查询
  • 开启运行时间监测:


set profiling=1;
  • 查找第1万条数据ha-99999


select * from test_index where title='ha-99999';
  • 查看执行的时间:


show profiles;
  • 为表title_index的title列创建索引:


create index title_index on test_index(title(10));
  • 执行查询语句:


select * from test_index where title='ha-99999';
  • 再次查看执行的时间


show profiles;


image.png


我们可以看到在创建索引后,查询的时间明显缩短了


  • 3.8、注意:


  • 要注意的是,建立太多的索引将会影响更新和插入的速度,因为它需要同样更新每个索引文件。对于一个经常需要更新和插入的表格,就没有必要为一个很少使用的where字句单独建立索引了,对于比较小的表,排序的开销不会很大,也没有必要建立另外的索引。
  • 建立索引会占用磁盘空间


四、账户管理, 在 第一节课中的7.3已经展示过基本的账户管理



  • 4.1、基本的了解
  • 在生产环境下操作数据库时,绝对不可以使用root账户连接,而是创建特定的账户,授予这个账户特定的操作权限,然后连接进行操作,主要的操作就是数据的crud
  • MySQL账户体系:根据账户所具有的权限的不同,MySQL的账户可以分为以下几种
  • 服务实例级账号:,启动了一个mysqld,即为一个数据库实例;如果某用户如root,拥有服务实例级分配的权限,那么该账号就可以删除所有的数据库、连同这些库中的表
  • 数据库级别账号:对特定数据库执行增删改查的所有操作
  • 数据表级别账号:对特定表执行增删改查等所有操作
  • 字段级别的权限:对某些表的特定字段进行操作
  • 存储程序级别的账号:对存储程序进行增删改查的操作
  • 账户的操作主要包括 创建账户、删除账户、修改密码、授权权限 等


  • 4.2、授予权限需要使用实例级账户登录后操作,以root为例,主要操作包括:查看所有用户、修改密码、删除用户,具体的每一个下面会介绍
  • <1>、查看所有用户
  • 所有用户及权限信息存储在mysql数据库的user表中
  • 查看user表的结构: user 表在 mysql 数据库里面


// 展示所有的数据库
show databases;
// 使用 mysql 库
use mysql;
// 展示所有的表
show tables;
// 查看 user 表
desc user;


image.png

  • 主要字段说明:
  • Host表示允许访问的主机
  • User表示用户名
  • authentication_string表示密码,为加密后的值
  • 查看所有用户


select user,authentication_string,host from user;


image.png


<2>、创建账户、授权

  • 需要使用实例级账户登录后操作,以root为例,也就是创建账户要用 root用户登录
  • 常用权限 主要包括:create、alter、drop、insert、update、delete、select
  • 如果分配所有权限,可以使用 all privileges
  • (1)、创建账户 & 授权


mysql>  grant 权限列表 on 数据库 to '用户名'@'访问主机' identified by '密码';
  • 提示:权限列表如果是多个可以写:create,alter,drop,用逗号隔开;访问主机:指的是主机的IP,可以用 本地:localhost,也可以 % 表示任何电脑可登陆例如:创建一个 test5 的用户,给他 jing_dong 库中所有表的select 的权限,并且可以在任何电脑登录:%,密码给他设置为 123456


  • step1: 用root用户登录


mysql -u root -p
输入密码进入
或者
 mysql -u root -p密码
  • step2: 真正的创建用户并授予查询(select)权限


mysql> grant select on jing_dong.* to test5@'%' identified by '123456';


提示:

  • 可以操作python数据库jing_dong里面所有表,方式为: jing_dong.*
  • 访问主机通常使用 百分号% 表示此账户可以使用 任何ip的主机 登录访问此数据库
  • 访问主机可以设置成 localhost 或 具体的ip,表示只允许本机或特定主机访问
  • 查看用户有哪些权限
    show grants for test5@'%';,如果不是%就该为其他的如:'localhost' 或者具体的ip: 'ip'


  • step3: 退出root的登录


输入exit或quit或\q,按下回车退出, 或者control+D退出
  • step4: 使用test5账户登录,密码:123456


mysql -u test5 -p123456


image.png

那么 test5 对数据库后面的操作就不再说了,可查,其他的权限没有


  • 4.3、账户操作


提示:下面的操作要使用 root 用户登录


  • <1>、修改权限:有关下面代码参数的含义可参考上面,其实也就是多了 with grant option;


grant 权限名称 on 数据库名 to 账户@主机 with grant option;
  • 例如:给 test5 用户增加一个 update 权限


grant select,update on jing_dong.* to test5@'%' with grant option;
  • 更新修改后的权限


flush privileges;
  • <2>、上面给用户增加了 update 的权限,也就是可以更新jing_dong 库中所有表的权限了
  • 登录上 test5 的账号,打开goods表


// 登录 test5 账号
mysql -u test5 -p123456
// 使用 jing_dong 库
use jing_dong;
// 查询 goods 表的信息
select * from goods;


image.png

修改 r510vc 15.6英寸游戏本 为 华为 10.1英寸笔记本


update goods set name='华为 10.1英寸笔记本' where id=1;


image.png

  • <3>、修改账户密码使用root登录,修改mysql数据库的user表
  • 使用password()函数进行密码加密


update user set authentication_string=password('新密码') where user='用户名';
  • 例如:


update user set authentication_string=password('456123') where user='test5';
  • 注意修改完成后需要刷新权限


flush privileges
  • <4>、 删除账户
  • 语法1:使用root登录


drop user '用户名'@'主机';
  • 例:


drop user 'test5'@'%';
  • 语法2:使用root登录,删除mysql数据库的user表中数据


delete from user where user='用户名';
  • 例:


delete from user where user='laowang';
  • 操作结束之后需要刷新权限


flush privileges

提示:推荐使用语法1删除用户, 如果使用语法1删除失败,采用语法2方式


  • <5>、 忘记 root 账户密码怎么办
  • root 账户一般归老大管,我们不需要操作,除非你是老大😋
  • 加入忘记了,到时候再来查


五、MySQL主从同步配置



  • 5.1、主从同步的定义
  • 主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)。因为复制是异步进行的,所以从服务器不需要一直连接着主服务器,从服务器甚至可以通过拨号断断续续地连接主服务器。通过配置文件,可以指定复制所有的数据库,某个数据库,甚至是某个数据库上的某个表。
  • 使用主从同步的好处:
  • 通过增加从服务器来提高数据库的性能,在主服务器上执行写入和更新,在从服务器上向外提供读功能,可以动态地调整从服务器的数量,从而调整整个数据库的性能。
  • 提高数据安全,因为数据已复制到从服务器,从服务器可以终止复制进程,所以,可以在从服务器上备份而不破坏主服务器相应数据
  • 在主服务器上生成实时数据,而在从服务器上分析这些数据,从而提高主服务器的性能
  • 5.2、主从同步的机制


image.png


  • Mysql服务器之间的主从同步是基于二进制日志机制,主服务器使用二进制日志来记录数据库的变动情况,从服务器通过读取和执行该日志文件来保持和主服务器的数据一致。
  • 在使用二进制日志时,主服务器的所有操作都会被记录下来,然后从服务器会接收到该日志的一个副本。从服务器可以指定执行该日志中的哪一类事件(譬如只插入数据或者只更新数据),默认会执行日志中的所有语句。
  • 每一个从服务器会记录关于二进制日志的信息:文件名和已经处理过的语句,这样意味着不同的从服务器可以分别执行同一个二进制日志的不同部分,并且从服务器可以随时连接或者中断和服务器的连接。
  • 主服务器和每一个从服务器都必须配置一个唯一的ID号(在my.cnf文件的[mysqld]模块下有一个server-id配置项),另外,每一个从服务器还需要通过CHANGE MASTER TO语句来配置它要连接的主服务器的ip地址,日志文件名称和该日志里面的位置(这些信息存储在主服务器的数据库里)


  • 5.3、配置主从同步的基本步骤


  • <1>、在主服务器上,必须开启二进制日志机制和配置一个独立的ID
  • <2>、在每一个从服务器上,配置一个唯一的ID,创建一个用来专门复制主服务器数据的账号
  • <3>、在开始复制进程前,在主服务器上记录二进制文件的位置信息
  • <4>、如果在开始复制之前,数据库中已经有数据,就必须先创建一个数据快照(可以使用mysqldump导出数据库,或者直接复制数据文件)
  • <5>、配置从服务器要连接的主服务器的IP地址和登陆授权,二进制日志文件名和位置


  • 5.4、详细配置主从同步的方法
  • 5.4.1、备份主服务器原有数据到从服务器,如果在设置主从同步前,主服务器上已有大量数据,可以使用mysqldump进行数据备份并还原到从服务器以实现数据的复制。
  • <1>、在阿里云主服务器上进行备份,执行命令:


mysqldump -u 用户名 -p密码 数据库名 --lock-all-tables > ~/master_db.sql


说明

  • -u :用户名
  • -p :示密码
  • --all-databases :导出所有数据库,如果要指定某个库可以直接改为 库名就好
  • --lock-all-tables :执行操作时锁住所有表,防止操作时有数据修改
  • ~/master_db.sql :导出的备份数据(sql文件)位置,可自己指定


  • 例如:把数据 jing_dong 在另外一台服务器进行备份(也就是设置一个从服务器)


mysqldump -uroot -p456123love jing_dong --lock-all-tables > ~/master_jing_dong_db.sql


image.png

<2>、在在另外一台阿里云服务器(从服务器)上进行数据还原

先把在 主服务器 上备份的数据导入到 从服务器

使用root账号登录上从服务器后


ssh -p 22 root@IP

远程服务主服务器备份的文件: master_jing_dong_db.sql,复制过去的文件名字叫:slave_jing_dong_db.sql,下面的ironman.ren是我的ip对应的域名


scp -P 22 root@ironman.ren:master_jing_dong_db.sql slave_jing_dong_db.sql


image.png


创建 jing_dong 数据库


create database jing_dong charset=utf8;

把刚才在处服务器备份出来的数据还原到 从服务器的数据库 jing_dong 里面

语法:mysql –u root –p密码 数据库名 < 备份的sql文件,如下


mysql –u root –p123456  jing_dong < slave_jing_dong_db.sql


image.png

5.4.2、配置主服务器master

  • (1)、编辑设置mysqld的配置文件,设置log_bin和server-id


vim /etc/my.cnf


image.png



  • (2)、重启mysql服务


sudo service mysql restart
  • (3)、登入主服务器中的mysql,创建用于从服务器同步数据使用的帐号


// 登录 mysql 的 root 用户 
mysql –uroot –p密码
// 创建用于从服务器同步数据使用的帐号,权限是数据库的所有权限
GRANT REPLICATION SLAVE on *.* to slave@'%' identified by '123456';
 // 刷新权限
FLUSH PRIVILEGES;
  • (4)、获取主服务器的二进制日志信息(查看创建后的状态) ,待会在从服务器要用到


show master status;


image.png
查看创建后的状态

  • 5.4.3、配置从服务器slave(我这里是在Linux下测试的)
  • (1)、编辑设置mysqld的配置文件,设置log_bin和server-id


sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf


image.png


  • (2)、重启mysql服务


sudo service mysql restart
  • (3)、登入主服务器中的mysql创建用于从服务器同步数据使用的帐号


change master to master_host='ironman.ren', master_user='slave', master_password='123456',master_log_file='mysql-bin.000001', master_log_pos=120;


提示:各个参数的解释

  • master_host :ironman.ren 是 主服务器的域名,你也可以使用IP
  • master_user :slave:   在主服务器创建的用于从服务器登录主服务器mysql的账号,在上面5.4.3中的(3)创建的
  • master_password :123456: 密码,在上面5.4.3中的(3)创建的
  • master_log_file :mysql-bin.000001 上面5.4.3中的(3)创建账号的时候生成的,看 5.4.3中的(4)查看的结果 ,也就是:前面查询到的主服务器日志文件名
  • master_log_pos:120: 上面5.4.3中的(3)创建账号的时候生成的,看 5.4.3中的(4)查看的结果 ,也就是:前面查询到的主服务器日志文件位置


  • 5.4.4、测试主从同步
    在做完上面的配置后,主从同步已经设置好了,那么下面我们进行测试,在主服务器的 jing_dong里面的goods表修改最后一条数据,把 商务双肩背包3 改为 商务包


image.png


提示:在主服务器修改


update goods set name='商务包' where id=21;

在从服务器看一下是否同步了,在下面的结果可以看到主从同步成功了😆


// 登录从服务器的 mysql
mysql –uroot –p密码
// 使用 jing_dong 表
use jing_dong;
// 查询 goods 表最后一条数据
select * from goods;



image.png

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1964 152
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
1353 156
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
SQL 关系型数据库 MySQL
Mysql数据恢复—Mysql数据库delete删除后数据恢复案例
本地服务器,操作系统为windows server。服务器上部署mysql单实例,innodb引擎,独立表空间。未进行数据库备份,未开启binlog。 人为误操作使用Delete命令删除数据时未添加where子句,导致全表数据被删除。删除后未对该表进行任何操作。需要恢复误删除的数据。 在本案例中的mysql数据库未进行备份,也未开启binlog日志,无法直接还原数据库。
1086 2
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
SQL 关系型数据库 MySQL
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL 数据库 SQL 语句调优方法详解(2-1)
本文深入介绍 MySQL 数据库 SQL 语句调优方法。涵盖分析查询执行计划,如使用 EXPLAIN 命令及理解关键指标;优化查询语句结构,包括避免子查询、减少函数使用、合理用索引列及避免 “OR”。还介绍了索引类型知识,如 B 树索引、哈希索引等。结合与 MySQL 数据库课程设计相关文章,强调 SQL 语句调优重要性。为提升数据库性能提供实用方法,适合数据库管理员和开发人员。
|
关系型数据库 MySQL 大数据
大数据新视界--大数据大厂之MySQL 数据库课程设计:MySQL 数据库 SQL 语句调优的进阶策略与实际案例(2-2)
本文延续前篇,深入探讨 MySQL 数据库 SQL 语句调优进阶策略。包括优化索引使用,介绍多种索引类型及避免索引失效等;调整数据库参数,如缓冲池、连接数和日志参数;还有分区表、垂直拆分等其他优化方法。通过实际案例分析展示调优效果。回顾与数据库课程设计相关文章,强调全面认识 MySQL 数据库重要性。为读者提供综合调优指导,确保数据库高效运行。
|
缓存 关系型数据库 MySQL
高并发架构系列:数据库主从同步的 3 种方案
本文详解高并发场景下数据库主从同步的三种解决方案:数据主从同步、数据库半同步复制、数据库中间件同步和缓存记录写key同步,旨在帮助解决数据一致性问题。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
高并发架构系列:数据库主从同步的 3 种方案
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
1578 15

推荐镜像

更多