mysql创建数据库参数,数据库的参数

发布时间:2022-11-20

本文目录一览:

  1. 如何用Mysql的命令行客户端创建数据库
  2. mysql如何数据库创建逻辑 汽车之家 参数对比 分类对比
  3. 如何在命令行创建一个MySQL数据库
  4. 数据库mysql创建表格老是出错,看不懂英文提示?

如何用Mysql的命令行客户端创建数据库

一、连接MySQL

格式: mysql -h主机地址 -u用户名 -p用户密码

  1. 连接到本机上的MYSQL:
    打开DOS窗口,进入目录mysql\bin,键入命令mysql -u root -p,回车后提示输入密码。注意用户名前可以有空格也可以没有空格,但密码前必须没有空格,否则会提示重新输入密码。 如果刚安装好MYSQL,超级用户root没有密码,直接回车即可进入MYSQL,提示符为:mysql>
  2. 连接到远程主机上的MYSQL:
    假设远程主机IP为:110.110.110.110,用户名为root,密码为abcd123,则键入以下命令:
    mysql -h110.110.110.110 -u root -p 123
    

    注:-uroot之间可以不用加空格,其它也一样。

  3. 退出MYSQL命令: exit(回车)

二、修改密码

格式: mysqladmin -u用户名 -p旧密码 password 新密码 例如:

  1. 给root加个密码ab12
    mysqladmin -u root -password ab12
    
  2. 将root的密码改为djg345
    mysqladmin -u root -p ab12 password ******
    

三、创建数据库

  1. 创建数据库:
    CREATE DATABASE 数据库名;
    
  2. 授权用户访问数据库:
    GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON 数据库名.* TO 数据库名@localhost IDENTIFIED BY '密码';
    
  3. 设置用户密码:
    SET PASSWORD FOR '数据库名'@'localhost' = OLD_PASSWORD('密码');
    

依次执行以上三条命令完成数据库创建。注意:中文“密码”和“数据库”是用户自己需要设置的。

现在介绍一些常用的MYSQL命令

注意:你必须首先登录到MYSQL中,以下操作都是在MYSQL的提示符下进行的,而且每个命令以分号结束。

一、操作技巧

  1. 如果你打命令时忘记加分号,可以打个分号回车即可,无需重打一遍命令。
  2. 可以使用光标上下键调出以前的命令。

二、常用命令

  1. 显示当前数据库服务器中的数据库列表:
    SHOW DATABASES;
    
  2. 建立数据库:
    CREATE DATABASE 库名;
    
  3. 建立数据表:
    USE 库名;
    CREATE TABLE 表名 (字段名 VARCHAR(20), 字段名 CHAR(1));
    
  4. 删除数据库:
    DROP DATABASE 库名;
    
  5. 删除数据表:
    DROP TABLE 表名;
    
  6. 将表中记录清空:
    DELETE FROM 表名;
    
  7. 往表中插入记录:
    INSERT INTO 表名 VALUES ("hyq","M");
    
  8. 更新表中数据:
    UPDATE 表名 SET 字段名1='a',字段名2='b' WHERE 字段名3='c';
    
  9. 用文本方式将数据装入数据表中:
    LOAD DATA LOCAL INFILE "D:/mysql.txt" INTO TABLE 表名;
    
  10. 导入.sql文件命令:
    USE 数据库名;
    SOURCE d:/mysql.sql;
    
  11. 命令行修改root密码:
    UPDATE mysql.user SET password=PASSWORD('新密码') WHERE User='root';
    FLUSH PRIVILEGES;
    

三、一个建库和建表以及插入数据的实例

DROP DATABASE IF EXISTS school; -- 如果存在school则删除
CREATE DATABASE school; -- 建立库school
USE school; -- 打开库school
-- 建立表teacher
CREATE TABLE teacher (
    id INT(3) AUTO_INCREMENT NOT NULL PRIMARY KEY,
    name CHAR(10) NOT NULL,
    address VARCHAR(50) DEFAULT '深圳',
    year DATE
);
-- 插入数据
INSERT INTO teacher VALUES ('','allen','飞数科技1','2005-10-10');
INSERT INTO teacher VALUES ('','jack','飞数科技2','2005-12-23');

(1) 使用SQL文件导入数据

你可以将以上命令写入一个文本文件中,假设为sudu.sql,然后复制到C:\下,并在DOS状态进入目录\mysql\bin,然后键入以下命令:

mysql -uroot -p密码 c:\sudu.sql

如果成功,空出一行无任何显示;如有错误,会有提示。

(2) 或者进入命令行后使用:

source c:\sudu.sql;

四、将文本数据转到数据库中

  1. 文本数据应符合的格式: 字段数据之间用tab键隔开,null值用\n来代替。 例如:
    3 rose 飞数科技1 1976-10-10
    4 mike 飞数科技2 1975-12-23
    
    假设你把这两组数据存为sudu.txt文件,放在C:\根目录下。
  2. 数据传入命令:
    LOAD DATA LOCAL INFILE "c:\sudu.txt" INTO TABLE 表名;
    

    注意:你最好将文件复制到\mysql\bin目录下,并且要先用USE命令打开表所在的库。


五、备份数据库(命令在DOS的\mysql\bin目录下执行)

  1. 导出整个数据库:
    mysqldump -u 用户名 -p 数据库名 导出的文件名
    mysqldump -u user_name -p123456 database_name outfile_name.sql
    
  2. 导出一个表:
    mysqldump -u 用户名 -p 数据库名 表名 导出的文件名
    mysqldump -u user_name -p database_name table_name outfile_name.sql
    
  3. 导出一个数据库结构:
    mysqldump -u user_name -p -d --add-drop-table database_name outfile_name.sql
    
    -d 没有数据,--add-drop-table 在每个CREATE语句之前增加一个DROP TABLE
  4. 带语言参数导出:
    mysqldump -uroot -p --default-character-set=latin1 --set-charset=gbk --skip-opt database_name outfile_name.sql
    

mysql如何数据库创建逻辑 汽车之家 参数对比 分类对比

MySQL数据类型之一:字符型VARCHAR vs CHAR VARCHAR型和CHAR型数据的差别是细微的,但是非常重要。它们都是用来储存字符串长度小于255的字符。

  • 假如你向一个长度为四十个字符的VARCHAR型字段中输入数据BillGates。当你以后从这个字段中取出此数据时,你取出的数据其长度为十个字符——字符串BillGates的长度。
  • 如果你把字符串输入一个长度为四十个字符的CHAR型字段中,那么当你取出数据时,所取出的数据长度将是四十个字符。字符串的后面会被附加多余的空格。 当你建立自己的站点时,你会发现使用VARCHAR型字段要比CHAR型字段方便得多。使用VARCHAR型字段时,你不需要为剪掉你数据中多余的空格而操心。VARCHAR型字段的另一个突出的好处是它可以比CHAR型字段占用更少的内存和硬盘空间。当你的数据库很大时,这种内存和磁盘空间的节省会变得非常重要。

MySQL数据类型之二:文本型TEXT 使用文本型数据,你可以存放超过二十亿个字符的字符串。当你需要存储大串的字符时,应该使用文本型数据。注意文本型数据没有长度,而上一节中所讲的字符型数据是有长度的。一个文本型字段中的数据通常要么为空,要么很大。当你从HTML form的多行文本编辑框(TEXTAREA)中收集数据时,你应该把收集的信息存储于文本型字段中。 但是,无论何时,只要你能避免使用文本型字段,你就应该不使用它。文本型字段既大且慢,滥用文本型字段会使服务器速度变慢。文本型字段还会吃掉大量的磁盘空间。一旦你向文本型字段中输入了任何数据(甚至是空值),就会有2K的空间被自动分配给该数据。除非删除该记录,否则你无法收回这部分存储空间。

如何在命令行创建一个MySQL数据库

使用命令行创建MySQL数据库,首先要登录MySQL数据库系统。

创建步骤如下:

  1. Windows操作系统下,开始——运行,打开“运行”对话框,输入cmd,点击“确定”即可进入DOS窗口。
  2. 输入登录MySQL数据库命令:
    mysql -h 127.0.0.1 -u root -p
    
    • mysql 是登录数据库的命令;
    • -h 后面跟服务器的IP,由于本示例MySQL服务器安装在本地,因此IP地址为127.0.0.1
    • -u 后面跟用户名,本示例采用root用户登录;
    • -p 后面跟登录密码。
  3. 输入上述命令后回车,再输入登录密码,一般默认密码是root
  4. 成功登录MySQL数据库后就可以在DOS下使用SQL语句CREATE DATABASE创建数据库了:
    CREATE DATABASE 要创建的新数据库名;
    

相关操作附图: 图中的mydb1就是新创建的数据库。

数据库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 下面的表,可以考虑关闭下面的参数:
    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

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

INSERT INTO t (b) VALUES ('ddd');
STOP SLAVE;
EXIT;
[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)

我们有可能刚刚接手别人的 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。

这个问题的出现,就要考虑下 TRUNCATEDELETE 的区别了。 看下实验演练: 首先先创建一张表:

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

插入三条数据:

INSERT INTO t (b) VALUES ('aa');
INSERT INTO t (b) VALUES ('bb');
INSERT INTO t (b) VALUES ('cc');

先用 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=utf8Emoji 表情符号录入 MySQL 数据库中报错:
Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x97\xF0\x9F...' for column 'CONTENT' at row 1

解决思路: 针对表情插入的问题,一定还是字符集的问题。 处理方法: 我们可以直接在参数文件中,加入:

[mysqld]
init-connect='SET NAMES utf8mb4'
character-set-server=utf8mb4

注:utf8mb4utf8 的超集。

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.

大多数做 DBA 的同学,可能都会被开发人员告知,你们的数据库报了这个错误了。赶紧看看是哪里的问题。 这个问题是由两个参数影响的,wait_timeoutinteractive_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权限
  • 清理磁盘中的垃圾数据