MySQL数据库实验三(mysql数据库恢复)

数据库mysql创建表格老是出错,看不懂英文提示?

来自:51CTO(作者:superZS)

我在刚开始学习数据库的时候,没少走弯路。经常会遇到各种稀奇古怪的 error 信息,遇到报错会很慌张,急需一个解决问题的办法。跟无头苍蝇一样,会不加思索地把错误粘到百度上,希望赶紧查找一下有没有好的处理问题的方法。我想这个应该是刚从事数据库的小白,都会遇到窘境。

今天就给大家列举 MySQL 数据库中,最经典的十大错误案例,并附有处理问题的解决思路和方法,希望能给刚入行,或数据库爱好者一些帮助,今后再遇到任何报错,我们都可以很淡定地去处理。

学习任何一门技术的同时,其实就是自我修炼的过程。沉下心,尝试去拥抱数据的世界!

Top 1:

Too many connections(连接数过多,导致连接不上数据库,业务无法正常进行)

问题还原

解决问题的思路:

1、首先先要考虑在我们 MySQL 数据库参数文件里面,对应的 max_connections 这个参数值是不是设置的太小了,导致客户端连接数超过了数据库所承受的最大值。

● 该值默认大小是151,我们可以根据实际情况进行调整。

● 对应解决办法:set global max_connections=500

但这样调整会有隐患,因为我们无法确认数据库是否可以承担这么大的连接压力,就好比原来一个人只能吃一个馒头,但现在却非要让他吃 10 个,他肯定接受不了。反应到服务器上面,就有可能会出现宕机的可能。

所以这又反应出了,我们在新上线一个业务系统的时候,要做好压力测试。保证后期对数据库进行优化调整。

2、其次可以限制 Innodb 的并发处理数量,如果 innodb_thread_concurrency = 0(这种代表不受限制) 可以先改成 16或是64 看服务器压力。如果非常大,可以先改的小一点让服务器的压力下来之后,然后再慢慢增大,根据自己的业务而定。个人建议可以先调整为 16 即可。

MySQL 随着连接数的增加性能是会下降的,可以让开发配合设置 thread pool,连接复用。在MySQL商业版中加入了thread pool这项功能

另外对于有的监控程序会读取 information_schema 下面的表,可以考虑关闭下面的参数

innodb_stats_on_metadata=0

set global innodb_stats_on_metadata=0

Top 2:(主从复制报错类型)

Last_SQL_Errno: 1062 (从库与主库数据冲突)

Last_Errno: 1062

Last_Error: Could not execute Write_rows event on table test.t;

Duplicate entry \'4\' for key \'PRIMARY\',

Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY;

the event\'s master log mysql-bin.000014, end_log_pos 1505

针对这个报错,我们首先要考虑是不是在从库中误操作导致的。结果发现,我们在从库中进行了一条针对有主键表的 sql 语句的插入,导致主库再插入相同 sql 的时候,主从状态出现异常。发生主键冲突的报错。

解决方法:

在确保主从数据一致性的前提下,可以在从库进行错误跳过。一般使用 percona-toolkit 中的 pt-slave-restart 进行。

在从库完成如下操作

[root@zs bin]# ./pt-slave-restart -uroot -proot123

2017-07-20T14:05:30 p=...,u=root node4-relay-bin.000002 1506 1062

之后最好在从库中开启 read_only 参数,禁止在从库进行写入操作

Last_IO_Errno: 1593(server-id冲突)

Last_IO_Error:

Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids;

these ids must be different for replication to work

(or the --replicate-same-server-id option must be used on slave but this

does not always make sense; please check the manual before using it)

这个报错出现之后,就看一目了然看到两台机器的 server-id 是一样的。

在搭建主从复制的过程中,我们要确保两台机器的 server-id 是唯一的。这里再强调一下 server-id 的命名规则(服务器 ip 地址的最后一位+本 MySQL 服务的端口号)

解决方法:

在主从两台机器上设置不同的 server-id。

Last_SQL_Errno: 1032(从库少数据,主库更新的时候,从库报错)

Last_SQL_Error:

Could not execute Update_rows event on table test.t; Can\'t find record

in \'t\', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the

event\'s master log mysql-bin.000014, end_log_pos 1708

解决问题的办法:

根据报错信息,我们可以获取到报错日志和position号,然后就能找到主库执行的哪条sql,导致的主从报错。

在主库执行:

/usr/local/mysql/bin/mysqlbinlog --no-defaults -v -v --base64-output=decode-rows /data/mysql/mysql-bin.000014 |grep -A 10 1708 1.log

cat 1.log

#170720 14:20:15 server id 3 end_log_pos 1708 CRC32 0x97b6bdec Update_rows: table id 113 flags: STMT_END_F

### UPDATE `test`.`t`

### WHERE

### @1=4 /* INT meta=0 nullable=0 is_null=0 */

### @2=\'dd\' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */

### SET

### @1=4 /* INT meta=0 nullable=0 is_null=0 */

### @2=\'ddd\' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */

# at 1708

#170720 14:20:15 server id 3 end_log_pos 1739 CRC32 0xecaf1922 Xid = 654

COMMIT/*!*/;

DELIMITER ;

# End of log file

ROLLBACK /* added by mysqlbinlog */;

/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

获取到 sql 语句之后,就可以在从库反向执行 sql 语句。把从库缺少的 sql 语句补全,解决报错信息。

在从库依次执行:

mysql insert into t (b) values (\'ddd\');

Query OK, 1 row affected (0.01 sec)

mysql stop slave;

Query OK, 0 rows affected (0.00 sec)

mysql exit

Bye

[root@node4 bin]# ./pt-slave-restart -uroot -proot123

2017-07-20T14:31:37 p=...,u=root node4-relay-bin.000005 283 1032

Top 3:MySQL安装过程中的报错

[root@zs data]# /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf [1] 3758

[root@zs data]# 170720 14:41:24 mysqld_safe Logging to \'/data/mysql/error.log\'.

170720 14:41:24 mysqld_safe Starting mysqld daemon with databases from /data/mysql170720

14:41:25 mysqld_safe mysqld from pid file /data/mysql/node4.pid ended

170720 14:41:24 mysqld_safe Starting mysqld daemon with databases from /data/mysql2017-07-20

14:41:25 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated.

Please use --explicit_defaults_for_timestamp server option

(see documentation for more details)./usr/local/mysql/bin/mysqld:

File \'/data/mysql/mysql-bin.index\' not found (Errcode: 13 - Permission denied)

2017-07-20 14:41:25 4388 [ERROR] Aborting

解决思路:

遇到这样的报错信息,我们要学会时时去关注错误日志 error log 里面的内容。看见了关键的报错点 Permission denied。证明当前 MySQL 数据库的数据目录没有权限。

解决方法:

[root@zs data]# chown mysql:mysql -R mysql

[root@zs data]# /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf

[1] 4402

[root@zs data]# 170720 14:45:56 mysqld_safe Logging to \'/data/mysql/error.log\'.

170720 14:45:56 mysqld_safe Starting mysqld daemon with databases from /data/mysql

启动成功。

如何避免这类问题,个人建议在安装 MySQL 初始化的时候,一定加上--user=mysql,这样就可以避免权限问题。

./mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql/ --defaults-file=/etc/my.cnf --user=mysql

Top 4:数据库密码忘记的问题

[root@zs ~]# mysql -uroot -p

Enter password:

ERROR 1045 (28000): Access denied for user \'root\'@\'localhost\' (using password: YES)

[root@zs ~]# mysql -uroot -p

Enter password:

ERROR 1045 (28000): Access denied for user \'root\'@\'localhost\' (using password: YES)

我们有可能刚刚接手别人的 MySQL 数据库,而且没有完善的交接文档。root 密码可以丢失或者忘记了。

解决思路:

目前是进入不了数据库的情况,所以我们要考虑是不是可以跳过权限。因为在数据库中,mysql数据库中user表记录着我们用户的信息。

解决方法:

启动 MySQL 数据库的过程中,可以这样执行:

/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --skip-grant-tables

这样启动,就可以不用输入密码,直接进入 mysql 数据库了。然后在修改你自己想要改的root密码即可。

update mysql.user set password=password(\'root123\') where user=\'root\';

Top 5:truncate 删除数据,导致自动清空自增ID,前端返回报错 not found。

这个问题的出现,就要考虑下 truncate 和 delete 的区别了。

看下实验演练:

首先先创建一张表;

CREATE TABLE `t` (

`a` int(11) NOT NULL AUTO_INCREMENT,

`b` varchar(20) DEFAULT NULL,

PRIMARY KEY (`a`),

KEY `b` (`b`)

) ENGINE=InnoDB AUTO_INCREMENT=300 DEFAULT CHARSET=utf8

插入三条数据:

mysql insert into t (b) values (\'aa\');

Query OK, 1 row affected (0.00 sec)

mysql insert into t (b) values (\'bb\');

Query OK, 1 row affected (0.00 sec)

mysql insert into t (b) values (\'cc\');

Query OK, 1 row affected (0.00 sec)

mysql select * from t;

+-----+------+

| a | b |

+-----+------+

| 300 | aa |

| 301 | bb |

| 302 | cc |

+-----+------+

3 rows in set (0.00 sec)

先用 delete 进行删除全表信息,再插入新值。

结果发现 truncate 把自增初始值重置了,自增属性从1开始记录了。当前端用主键id进行查询时,就会报没有这条数据的错误。

个人建议不要使用 truncate 对表进行删除操作,虽然可以回收表空间,但是会涉及自增属性问题。这些坑,我们不要轻易钻进去。

Top 6:

阿里云 MySQL 的配置文件中,需要注意一个参数设置就是:

lower_case_table_names = 0;默认情况

lower_case_table_names = 1;是不区分大小写 . 如果报你小写的表名找不到, 那你就把远端数据库的表名改成小写 , 反之亦然 . 注意 Mybatis 的 Mapper 文件的所有表名也要相应修改

Top 7:

有同学经常会问张老师,为什么我的数据库总会出现中文乱码的情况。一堆????不知道怎么回事。当向数据库中写入创建表,并插入中文时,会出现这种问题。此报错会涉及数据库字符集的问题。

解决思路:

对于中文乱码的情况,记住老师告诉你的三个统一就可以。还要知道在目前的mysql数据库中字符集编码都是默认的UTF8

处理办法:

1、数据终端,也就是我们连接数据库的工具设置为 utf8

2、操作系统层面;可以通过 cat /etc/sysconfig/i18n 查看;也要设置为 utf8

3、数据库层面;在参数文件中的 mysqld 下,加入 character-set-server=utf8。

Emoji 表情符号录入 mysql 数据库中报错。

Caused by: java.sql.SQLException: Incorrect string value: \'\\xF0\\x9F\\x98\\x97\\xF0\\x9F...\' for column \'CONTENT\' at row 1

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)

at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)

at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)

at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2734)

at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)

at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1379)

解决思路:针对表情插入的问题,一定还是字符集的问题。

处理方法:我们可以直接在参数文件中,加入

vim /etc/my.cnf

[mysqld]

init-connect=\'SET NAMES utf8mb4\'

character-set-server=utf8mb4

注:utf8mb4 是 utf8 的超集。

Top 8:使用 binlog_format=statement 这种格式,跨库操作,导致从库丢失数据,用户访问导致出现错误数据信息。

当前数据库二进制日志的格式为:binlog_format=statement

在主库设置binlog-do-db=mydb1(只同步mydb1这一个库)

在主库执行use mydb2;

insert into mydb1.t1 values (\'bb\');这条语句不会同步到从库。

但是这样操作就可以;

use mydb1;

insert into mydb1.t1 values (\'bb\');因为这是在同一个库中完成的操作。

在生产环境中建议使用binlog的格式为row,而且慎用binlog-do-db参数。

Top 9:MySQL 数据库连接超时的报错 ;

org.hibernate.util.JDBCExceptionReporter - SQL Error:0, SQLState: 08S01

org.hibernate.util.JDBCExceptionReporter - The last packet successfully received from the server was43200 milliseconds ago.The last packet sent successfully to the server was 43200 milliseconds ago, which is longer than the server configured value of \'wait_timeout\'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection \'autoReconnect=true\' to avoid this problem.

org.hibernate.event.def.AbstractFlushingEventListener - Could not synchronize database state with session

org.hibernate.exception.JDBCConnectionException: Could not execute JDBC batch update

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Connection.close() has already been called. Invalid operation in this state.

org.hibernate.util.JDBCExceptionReporter - SQL Error:0, SQLState: 08003

org.hibernate.util.JDBCExceptionReporter - No operations allowed after connection closed. Connection was implicitly closed due to underlying exception/error:

** BEGIN NESTED EXCEPTION **

大多数做 DBA 的同学,可能都会被开发人员告知,你们的数据库报了这个错误了。赶紧看看是哪里的问题。

这个问题是由两个参数影响的,wait_timeout 和 interactive_timeout。数据默认的配置时间是28800(8小时)意味着,超过这个时间之后,MySQL 数据库为了节省资源,就会在数据库端断开这个连接,Mysql服务器端将其断开了,但是我们的程序再次使用这个连接时没有做任何判断,所以就挂了。

解决思路:

先要了解这两个参数的特性;这两个参数必须同时设置,而且必须要保证值一致才可以。

我们可以适当加大这个值,8小时太长了,不适用于生产环境。因为一个连接长时间不工作,还占用我们的连接数,会消耗我们的系统资源。

解决方法:

可以适当在程序中做判断;强烈建议在操作结束时更改应用程序逻辑以正确关闭连接;然后设置一个比较合理的timeout的值(根据业务情况来判断)

Top 10 :can\'t open file (errno:24)

有的时候,数据库跑得好好的,突然报不能打开数据库文件的错误了。

解决思路:

首先我们要先查看数据库的 error log。然后判断是表损坏,还是权限问题。还有可能磁盘空间不足导致的不能正常访问表;操作系统的限制也要关注下;用 perror 工具查看具体错误!

linux:/usr/local/mysql/bin # ./perror 24

OS error code 24: Too many open files

超出最大打开文件数限制!ulimit -n查看系统的最大打开文件数是65535,不可能超出!那必然是数据库的最大打开文件数超出限制!

在 MySQL 里查看最大打开文件数限制命令:show variables like \'open_files_limit\';

发现该数值过小,改为2048,重启 MySQL,应用正常

处理方法:

repair table ;

chown mysql权限

清理磁盘中的垃圾数据

用sql语句创建一个教师表教师可以带多个班但不能带多门课

热门频道

首页

博客

研修院

VIP

APP

问答

下载

社区

推荐频道

活动

招聘

专题

打开CSDN APP

Copyright © 1999-2020, CSDN.NET, All Rights Reserved

sql

打开APP

SQL数据库创建学生、教师、选课表 原创

2020-12-17 12:05:09

7点赞

Chowhound_i

码龄2年

关注

SQL数据库创建学生、教师、选课表

创建学生表

create table student (

sno char(14) primary key,

sname char (10) not null,

ssex char(2),

sage tinyint,

sdept varchar(20),

spassword tinyint,

)

1

2

3

4

5

6

7

8

1

2

3

4

5

6

7

8

创建教师表

create table teacher (

tno char(14) primary key,

tname char (10) not null,

tsex char(2),

tage tinyint,

sdept varchar(20),

spassword tinyint,

)

1

2

3

4

5

6

7

8

1

2

3

4

5

6

7

8

创建选课表

create table course (

cno char(10),

sno char(14) not null,

tno char(14) not null,

cyear tinyint,

cterm tinyint,

grade tinyint,

primary key(sno,tno),

foreign key(sno) references student(sno),

foreign key(tno) references teacher(tno),

)

1

2

3

4

5

6

7

8

9

10

11

1

2

3

4

5

6

7

8

9

10

11

文章知识点与官方知识档案匹配

MySQL入门技能树使用数据库创建和删除表

28046 人正在系统学习中

点击阅读全文

打开CSDN,阅读体验更佳

3.SQL--创建教师表和向表内插入数据_weixin_33712881的博客

3.SQL--创建教师表和向表内插入数据 --创建教师表,并向表内插入数据 create table Teacher(Tid varchar(10),Tname nvarchar(10)) --向表内插入数据 insertinto Teacher values(\'01\' , \'韩寒\') insert into Teacher values(\'02...

sql语句(学生表、课程表、分数表、教师表)_煜帆帆的博客

student(学生表)、teacher(教师表)、course(课程表)、sc(分数表) 2、创建表 //学生表 create table student( sno varchar2(10) primary key, sname varchar2(20), sage number(2), ssex varchar2(5) ); 1 2 3 4 5 6...

热门推荐 创建一个数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)

创建一个数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表… 表(一)Student (学生表) 属性名 数据类型 可否为空 含 义 Sno varchar (20) 否 学号 Sname varchar (20) 否 学生姓名 Ssex varchar ...

继续访问

mysql创建教师表_day34 mysql 认识数据库,创建学生,教师,学院表

数据库 - 数据的仓库(集散地) - database - 实现数据持久化和数据管理持久化 - 将数据从内存转移到能够长久保存数据的存储介质的过程数据库的分类:关系型数据库(SQL)和非关系型数据库(NoSQL)文件系统 / 层次数据库 / 网状数据库关系型数据库1970s - E.F.Codd - IBM研究员 - System R理论基础:关系代数和集合论具体表象:用二维表来保存数据 - 学生...

继续访问

使用SQL语句创建及使用SQLServer数据库_MyAnqi的博客

1使用SQL语句在数据库中Student表插入对应表格前2行元组。 insert into Student(sno,sn,sex,bor,clano,age)values(108,\'曾华\',\'男\',\'1992-09-01\',\'09033\',22); insert into Student(sno,sn,sex,bor,clano,age)values(105,...

...名学生的SQL语句。_白一晓的博客_查询教师表中的总人数

在Mysql面试的写SQL语句环节中,有人曾碰到了这样一道这样的一道SQL语句题。目前有两张数据表,一张学生,一张老师表。里面都有Name和Code两个字段。求出张三的老师一共有多少名学生。 这样,我们还是先建两张普通的数据表。

最新发布 mysql 创建学生表、课程表、学生选课表

学生-课程数据库中包含以下三个表关系的主码加粗表示,各个表中的数据实例:StudentCourseSCSno为Student表的主键,Cno为Course表的主键,SC表中外键Sno,Cno分别是Student表和Course表的主键

继续访问

数据库实验报告一

KingBase数据库下SQL语句的基本使用

继续访问

数据库sql语句练习_Young_991的博客

一、设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示。用SQL语句创建四个表并完成相关题...

...和MySQL示例查询_库特社区的博客_sql创建教师信息表

了解如何在其中创建表是一个重要且基本的概念。SQL 在本教程中,我将使用 PostgreSQL 和 MySQL 的代码示例向您介绍语句的语法。SQLCREATE TABLE 基本语法CREATE TABLE 以下是该语句的基本语法:CREATE TABLE ...

【SQL】基本SQL数据表(学生、老师、课程、成绩)

create table student--创建student数据表 ( s_no char(10) not null, --学号 s_name nchar(10), --姓名 s_sex char(2), --性别 borndate smalldatetime,--出生日期 ClassName nvarchar(50), --班级名称 Telephone varchar(11), --电话号码 EnrollDate smal.

继续访问

数据库题:学生表,选课表,课程表写SQL(多表)

设教学数据库中有三个基本表: 学生表 S(SNO,SNAME,AGE,SEX),其属性表示学生的学号、姓名、年龄和性别;选课表 SC(SNO,CNO,GRADE),其属性表示学生的学号、所学课程的课程号和成绩;课程表 C(CNO,CNAME,TEACHER),其属性表示课程号、课程名称和任课教师姓名。 下面的题目都是针对上述三个基本表操作的(原题S#、C#这样子写法在查询的时候会报错,这里就用S...

继续访问

2021-09-06

#创建db_test数据库 create DATABASE db_test CHARACTER set utf8; use db_test; #在test数据库中创建teacher表 create table teacher( number int PRIMARY key auto_increment, tname VARCHAR(30), sex VARCHAR(4), depno int, salary float, address VARCHAR(...

继续访问

太原理工大学软件学院数据库实验四(2021.4.26)

太原理工大学软件学院数据库实验四(2021.4.26) -- (1)创建Student 表 CREATE TABLE Student ( Sno CHAR(8) PRIMARY KEY, Sname CHAR(8) NOT NULL, Ssex CHAR(2) CHECK( Ssex in (\'男\',\'女\')), Sage SMALLINT, Sdept CHAR(20), Sclass CHAR(4) NOT NULL, Stotal smallint DEFAULT 0 ); -- (2)创建Cours

继续访问

SQL语言编程实战系列(一)——教学管理数据库的创建和简单操作

SQL语言编程实战系列(一)——教学管理数据库的创建和简单操作,基于《数据库原理与设计——基于SQL Server2012》王世民等编著P204-综合题5.3.1编写的解答。

继续访问

SQL建表语句(建立学生_课程数据库)

SQL建表语句(建立学生_课程数据库) (1)建立学生_课程数据库 (2)包含学生表Student 包含Sno(学号),Sname(姓名),Ssex(性别),Sage(年龄),Sdapt(所在系)属性列 学号为主码(主键) (3)创建课程表Course 包含Cno(课程号),Cname(课程名),Cpno(先行课课程号),Credit(学分)属性列 课程号为主码(主键) (4)学生_课程表SC 包含Sno(学号),Cno(课程号),Grade(成绩)属性列 学号,课程号为主码(主键) Creat

继续访问

Oracle完整的试题

[code=\"java\"]create table student( sno varchar2(10) primary key, sname varchar2(20), sage number(2), ssex varchar2(5) ); create table teacher( tno varchar2(10) primary key, tname varchar2(20) ...

继续访问

用mysql创建学生成绩表_用SQL创建学生成绩数据库

创建数据库school,这个数据库中包含四个表:分别是学生表、教师表、课程表和成绩表。语法:create database school;(创建数据库school)show databases;(查看是否已经创建好)drop database school;(删除数据库school,这里不必删除)2.设计创建学生表、教师表、课程表和成绩表。语法:use school;create table st...

继续访问

数据库面试----学生、老师、课程、选课表常用sql示例

数据库面试----学生、老师、课程、选课表常用sql示例 请先看看六大范式详解 1——建表 (1)学生表 student DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `sid` int(11) DEFAULT NULL, `sname` varchar(20) DEFAULT NULL, `sage` int(11) DEFAULT NULL, `ssex` varchar(20) DEFAULT NULL ) ENGIN

继续访问

创建学院表 学生表 教师表 课程表 选课记录表

为什么要使用数据库 解决数据持久化问题 高效的管理数据(增删改查) 数据库的分类: 关系型数据库 理论基础:关系代数 具体表象:二维表 行:记录 列:字段 编程语言:SQL(结构化查询语言) DDL - 数据定义语言 — create / drop / alter DML - 数据操作语言 — insert / delete / update DQL - 数据查询语言 — select DCL - 数据控制语言 — grant / revoke ...

继续访问

将数据插入教师表.sql

sql 插入多条语句

合肥工业大学—SQL Server数据库实验三:SQL语句创建和删除基本表

SQL语句创建和删除基本表1. 编写6个基本表2. 修改基本表结构,完整性约束条件3. 用Drop table 语句删除基本表 1. 编写6个基本表 设有简单教学管理的6个关系模式如下: 系(系编号,系名称、系主任、联系电话、地址) 专业(专业编号、专业名称、所属系) 教师(教师编号、姓名、所在系、电话、电子信箱) 学生(学号、姓名、性别、出生日期、所学专业) 课程(课程号、课程名、学分、先修课) 学生选课(学号、课程号、成绩) 要求:在数据库EDUC中,创建对应的6个基本表,基本表的名称和属性名称由

继续访问

学习好sql

科目表 Course数据表介绍 --1.学生表 Student(SId,Sname,Sage,Ssex) --SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 --2.课程表 Course(CId,Cname,TId) --CId 课程编号,Cname 课程名称,TId 教师编号 --3.教师表 Teacher(TId,Tname) --TId 教师编号,Tna...

继续访问

CSDN学霸课表——NoSQL是什么

《NoSQL是什么》 NoSQL(NoSQL = Not Only SQL),意即反SQL运动,是一项全新的数据库革命性运动。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于目前铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。 ►阅读全文 Redis集群架构讲师:李兴华 Redis是现在使用最为广泛的NoSQL数据库技术,其自身不仅拥有着良好的操作性能,也被广

继续访问

MySQL的teaching表建立_MySQL-一- 创建数据表

问题一:如何验证MySQL数据库安装成功?问题二:如何用客户端navicat连接到MySQL数据库?练习:创建学校数据库的表2.创建数据库2.1 创建学生表student2.2创建成绩表score2.3创建课程表course2.4创建教师表 teacher注:这里教师姓名可以为null3.练习插入数据3.1 向学生表里添加数据3.2向成绩表中添加数据3.3向课程表中添加数据3.4向教师表中添加数据...

继续访问

学生选课在MYSQL创建表_设要建立“学生选课”数据库,库中包括学生、课程和选课 3 个表,其表结构为: 学生(学号,姓名,性别,年龄,所在系) 课程(课程号,课程名,先行课) 选课(学号,课程号,成...

【单选题】湿空气的下列参数:I.干球温度、II.湿球温度、III.露点温度,它们之间的大小关系是【填空题】在缺省情况下,所创建的索引是_________索引。【其它】使用 T-SQL 命令,完成下面的操作。 1 .创建学生成绩视图(学号,姓名,课程编号,课程名称,成绩) 。 2 .创建信息系学生视图(学号,姓名,性别,系名,出生日期,民族,总学分,备注)。 3 .创建优秀学生视图(学号,姓名,平均...

继续访问

用sql语句创建一个教师表

sql

写评论

评论

35

7

分享

前往CSDN APP阅读全文

阅读体验更佳

CSDN

成就一亿技术人

前往

Chrome浏览器

继续

打开CSDN APP阅读体验更佳

k8s中的Mysql数据库持久化存储

 

一、配置:

环境:

CentOS7 

VMware

笔者配置了四台虚拟机:

K8S-Master节点: 3GB内存   2核CPU   20GB硬盘空间

K8S-node1节点:  2GB内存   2核CPU   30GB硬盘空间

K8S-node2节点:  2GB内存   2核CPU   30GB硬盘空间

镜像仓库节点:      2GB内存   2核CPU   50GB硬盘空间

二、节点规划:

使用三台虚拟机搭建K8S集群,使用一台虚拟机搭建镜像仓库。

每台虚拟机配置两块网卡,其中一块为“NAT模式”,用于拉取镜像等功能。

另外一块网卡为“仅主机模式”,用于集群节点间的通信。归划如下:

K8s-master节点:

仅主机模式:10.10.10.200

NAT模式:  192.168.200.130

K8S-node1节点:

仅主机模式:10.10.10.201

NAT模式:  192.168.200.131

K8S-node2节点:

仅主机模式:10.10.10.202

NAT模式:  192.168.200.132

镜像仓库节点:

仅主机模式:10.10.10.101

NAT模式:  192.168.200.150

三、版本信息

Linux内核版本:

Linux version 3.10.0-862.el7.x86_64 (builder@kbuilder.dev.centos.org)

(gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) )

 #1 SMP Fri Apr 20 16:44:24 UTC 2018

K8s集群版本为1.15.0版本:

四、基于StatefulSet与PV/PVC的MySql持久化存储实验

1. 在每个节点安装nfs服务

在“镜像仓库”节点,执行以下命令:

yum install -y nfs-common nfs-utils rpcbind

在k8s集群,执行以下命令:

yum install -y nfs-utils rpcbind

2. 在“镜像仓库”节点下,配置nfs服务器

mkdir /nfs_mysql

Chmod 777 /nfs_mysql/

(在测试环境中,为了不考虑用户属性,暂时赋予777权限,但在生产环境不推荐这样做)

Chown nfsnobody /nfs_mysql/

echo “/nfs_mysql *(rw,no_root_squash,no_all_squash,sync)”  /etc/exports

cat /etc/exports

/nfs_mysql *(rw,no_root_squash,no_all_squash,sync)

systemctl start rpcbind

systemctl start nfs

3. 测试nfs服务是否可用

mkdir /test

showmount -e 10.10.10.101

可见/nfs_mysql *已暴露于共享目录,接下来测试挂载是否可用:

在master节点下执行:

mount -t nfs 10.10.10.101:/nfs_mysql /test/

echo \"hello-world\"/test/1.txt

在镜像仓库节点下查看1.txt是否存在,若存在则挂载成功:

可见nfs服务可以正常使用,接下来删除test目录和1.txt

在镜像仓库下:

[root@hub nfs_mysql]# rm -f 1.txt

在Master节点下:

[root@k8s-master ~]# umount /test/

[root@k8s-master ~]# rm -rf /test/

同理,依照以上步骤同时创建:(提供多个mysql副本进行挂载)

nfs_mysql1

nfs_mysql2

完成后需要重启nfs服务

systemctl restart rpcbind

systemctl restart nfs

最终效果:

4. 将nfs封装成pv

创建mysql_test文件夹,将yaml文件统一保存在此目录下

mkdir mysql_test

cd mysql_test

vim mysql-pv.yml

mysql-pv.yml配置如下:

apiVersion: v1

kind: PersistentVolume

metadata:

  name: mysql-pv

spec:

  capacity:

    storage: 5Gi

  accessModes:

    -  ReadWriteOnce

  persistentVolumeReclaimPolicy: Retain

  storageClassName: nfs

  nfs:

    path: /nfs_mysql

    server: 10.10.10.101

---

apiVersion: v1

kind: PersistentVolume

metadata:

  name: mysql-pv1

spec:

  capacity:

    storage: 5Gi

  accessModes:

    -  ReadWriteOnce

  persistentVolumeReclaimPolicy: Retain

  storageClassName: nfs

  nfs:

    path: /nfs_mysql1

    server: 10.10.10.101

---

apiVersion: v1

kind: PersistentVolume

metadata:

  name: mysql-pv2

spec:

  capacity:

    storage: 5Gi

  accessModes:

    -  ReadWriteOnce

  persistentVolumeReclaimPolicy: Retain

  storageClassName: nfs

  nfs:

    path: /nfs_mysql2

    server: 10.10.10.101

注意:

在k8s集群15版本中recycle回收策略已被删除,只能用retain策略或者Delete策略。这里我们使用 persistentVolumeReclaimPolicy: Retain

 

执行命令:

kubectl create -f mysql-pv.yml

kubectl get pv

如图所示,即为Pv创建成功。

5. 部署MySQL,在mysql_test目录下编写mysql.yml,配置文件如下

apiVersion: v1

kind: Service

metadata:

  name: mysql

  labels:

    app: mysql

spec:

  ports:

  - port: 3306

    name: mysql

  clusterIP: None

  selector:

    app: mysql

---

apiVersion: apps/v1

kind: StatefulSet

metadata:

  name: mysql

spec:

  selector:

    matchLabels:

      app: mysql

  serviceName: \"mysql\"

  replicas: 3

  template:

    metadata:

      labels:

        app: mysql

    spec:

      containers:

      - name: mysql

        image: mysql:5.6

        env:

        - name: MYSQL_ROOT_PASSWORD

          value: password

        ports:

        - containerPort: 3306

          name: mysql

        volumeMounts:

        - name: mysql-persistent-storage

          mountPath: /var/lib/mysql

  volumeClaimTemplates:

  - metadata:

      name: mysql-persistent-storage

    spec:

      accessModes: [\"ReadWriteOnce\"]

      storageClassName: \"nfs\"

      resources:

        requests:

          storage: 1Gi  

执行以下命令,部署mysql服务:

kubectl create -f mysql.yml

如图可知,mysql按StatefulSet依次创建了mysql-0 mysql-1 mysql-2

查看各个Pod部在哪个节点:

6. 通过创建临时容器,使用MySQL客户端发送测试请求给MySQL master节点

注意:

主机名为mysql-0.mysql;跨命名空间的话,主机名请使用mysql-0.mysql. [NAMESPACE_NAME].如果没有指定命名空间,默认为default,即 mysql-0.mysql. default。

   

这里笔者打算关闭node2节点来模拟node2宕机,来测试是否实现数据的持久化存储,

所以我们向node2上的mysql1写入数据。

 

执行以下命令,访问mysql1:

kubectl run mysql-client --image=mysql:5.6 -it --rm --restart=Never -- mysql -h mysql-1.mysql.default -p password

创建数据库demo,并向messages表中写入hello-world

CREATE DATABASE demo; 

CREATE TABLE demo.messages (message VARCHAR(250)); 

INSERT INTO demo.messages VALUES (\'hello-world\');

如图所示

接下来我们来关闭k8s-node2虚拟机,模拟宕机

查看nodes的运行状态,可知node2的状态已转变为NotReady

一段时间后,k8s将Pod MySql -1迁移到节点k8s-node1

由于时间过长,笔者把三个Pod都删除重启后,验证数据:

MySQL服务恢复,数据完好无损!

java连接mysql数据库

步骤如下,

1. 在开发环境中加载指定数据库的驱动程序。

接下来的实验中,使用数据库MySQL,所以需要下载MySQL支持JDBC的驱动程序(mysql-connector-java-5.1.18-bin.jar)。

2. 开发环境是MyEclipse,将下载得到的驱动程序加载进开发环境中。

3. 在Java程序中加载驱动程序。

在Java程序中,通过 “Class.forName(“指定数据库的驱动程序”)”

方式来加载添加到开发环境中的驱动程序,例如Class.forName(“com.mysql.jdbc.Driver”)。

4. 创建数据连接对象:通过DriverManager类创建数据库连接对象Connection。

DriverManager类作用于Java程序和JDBC驱动程序之间,用于检查所加载的驱动程序是否可以建立连接,然后通过它的getConnection方法,根据数据库的URL、用户名和密码,创建一个JDBC

Connection 对象。代码如:Connection connection = DriverManager.getConnection(“连接数据库的URL\", \"用户名\",

\"密码”)。

其中,URL=协议名+IP地址(域名)+端口+数据库名称;用户名和密码是指登录数据库时所使用的用户名和密码。具体示例创建MySQL的数据库连接代码如下:

Connection connectMySQL =

DriverManager.geiConnection(“jdbc:mysql://localhost:3306/myuser\",\"root\"

,\"root\" );

5. 创建Statement对象:Statement 类的主要是用于执行静态 SQL

语句并返回它所生成结果的对象。

通过Connection 对象的 createStatement()方法可以创建一个Statement对象。例如:Statement statament =

connection.createStatement(); 具体示例创建Statement对象代码如下:Statement statamentMySQL =connectMySQL.createStatement();

6. 调用Statement对象的相关方法执行相对应的 SQL

语句:通过execuUpdate()方法用来数据的更新,包括插入和删除等操作,例如向staff表中插入一条数据的代码:

statement.excuteUpdate( \"INSERT INTO

staff(name, age, sex,address, depart, worklen,wage)\" + \" VALUES (\'Tom1\', 321,

\'M\', \'china\',\'Personnel\',\'3\',\'3000\' ) \") ;

7. 通过调用Statement对象的executeQuery()方法进行数据的查询,而查询结果会得到

ResulSet对象,ResulSet表示执行查询数据库后返回的数据的集合,ResulSet对象具有可以指向当前数据行的指针。通过该对象的next()方法,使得指针指向下一行,然后将数据以列号或者字段名取出。如果当next()方法返回null,则表示下一行中没有数据存在。使用示例代码如下:

ResultSet resultSel =

statement.executeQuery( \"select * from staff\" );

8. 关闭数据库连接:使用完数据库或者不需要访问数据库时,通过Connection的close() 方法及时关闭数据连接。

Mysql建立数据库如和在一个指定的位置建立数据库,如何指定数据库默认的存储位置

工具/材料:Management Studio。

1、首先在桌面上,点击“Management Studio”图标。

2、然后在该界面中,右键点击“新建数据库”。

3、之后在该界面中,输入数据库名称。

4、接着在该界面中,点击数据库文件里,test的存储路径选择按钮。

5、然后在该界面中,选中指定存储位置,点击“确定”按钮。

6、继续在该界面中,点击数据库文件里,test_log的存储路径选择按钮。

7、再者在该界面中,选中指定存储位置,点击“确定”按钮。

8、最后在该界面中,点击“确定”按钮即可。

《网站建设:(JSP+MySQL)组建动态网站》 实验实践题目及具体要求

首先,最首先,我估计没人给你做,第一,,这个是你的作业,第二,,没钱没利益,,第三,,门槛技术相对较高,除非采用框架,可是采用框架~~他还算作业~~唉,回家多琢磨琢磨吧~

未经允许不得转载:便宜VPS网 » MySQL数据库实验三(mysql数据库恢复)