如果你写一个小工具或者游戏,可以直接写代码,不涉及存储数据的操作。但是如果要写一个网络工具、系统平台或者网络游戏,就需要存储大量的数据。在早期,所有的数据都是通过文件存
如果你写一个小工具或者游戏,可以直接写代码,不涉及存储数据的操作。但是如果要写一个网络工具、系统平台或者网络游戏,就需要存储大量的数据。
在早期,所有的数据都是通过文件存储的,但是使用文件作为存储介质是非常有限的。首先,文件是独立的,很难进行统计操作;其次,文件依赖IO句柄,频繁打开和关闭文件会影响系统资源。
这时候数据库就应运而生了,它可以最大限度的解决存储和读取的问题,并且依靠通用的SQL语法标准,可以快速灵活的从数据库引擎中存储和读取数据。
MySQL是一个开源的、免费的、强大的数据库引擎。今天跟着富哥学习一下如何在我们的TFLinux操作系统上安装MySQL数据库引擎。
基本信息安装环境
CentOS:CentOS Linux版本7.6.1810(核心)Linux:Linux版本3 . 10 . 0-1062 . el7 . x86 _ 64
GCC:GCC版本4.8.5 20150623(红帽4.8.5-36) (GCC)
软件发布
MySQL-5 . 7 . 28-Linux-glibc 2.12-x86 _ 64 . tar . gz
准备工作/即将开始工作本地化
如果是新环境,我们需要设置时区,以保证时间显示正确。
timedatectl?set-timezone?Asia/Shanghai
安装wget
如果环境中没有wget,通过yum安装。
yum?-y?install?wget
安装依赖包
yum?-y?install?libaio?numactl-libs
建立环境根目录
mkdir?-p?/tongfu.net/env/
建立安装包目录并输入
mkdir?/packagescd?/packages
安装MySQL 5.7准备
MySQL-5 . 7 . 28-Linux-glibc 2.12-x86 _ 64 . tar . g
下载安装包
下载mysql-5.7.28安装包
wget?https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
创建帐号
你需要创建一个用户mysql。
useradd?mysql
安装mysql
我们下载了编译好的二进制版本,可以直接解压使用。
tar?-xzvf?mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz?-C?/tongfu.net/env/cd?/tongfu.net/env/mv?mysql-5.7.28-linux-glibc2.12-x86_64/?mysql-5.7.28
初始化
使用mysqld进行初始化。
mkdir?mysql-5.7.28/data/chown?-R?mysql.mysql?mysql-5.7.28/./mysql-5.7.28/bin/mysqld?--initialize?--user=mysql?--basedir=/tongfu.net/env/mysql-5.7.28/?--datadir=/tongfu.net/env/mysql-5.7.28/data/
注意:执行上述命令后,初始化密码会被打印出来,一定要保存好。
2020-01-07T03:41:01.823712Z?0?[Warning]?TIMESTAMP?with?implicit?DEFAULT?value?is?deprecated.?Please?use?--explicit_defaults_for_timestamp?server?option?(see?documentation?for?more?details).2020-01-07T03:41:03.374189Z?0?[Warning]?InnoDB:?New?log?files?created,?LSN=457902020-01-07T03:41:03.775803Z?0?[Warning]?InnoDB:?Creating?foreign?key?constraint?system?tables.2020-01-07T03:41:03.952070Z?0?[Warning]?No?existing?UUID?has?been?found,?so?we?assume?that?this?is?the?first?time?that?this?server?has?been?started.?Generating?a?new?UUID:?87b0b720-30ff-11ea-9268-02420a100170.2020-01-07T03:41:03.975895Z?0?[Warning]?Gtid?table?is?not?ready?to?be?used.?Table?'mysql.gtid_executed'?cannot?be?opened.2020-01-07T03:41:04.839331Z?0?[Warning]?CA?certificate?ca.pem?is?self?signed.2020-01-07T03:41:05.515747Z?1?[Note]?A?temporary?password?is?generated?for?root@localhost:?FwaKHorkK6;3
部署默认为My.cnf
删除默认的my.cnf文件
rm?-f?/etc/my.cnf
开始开始
修改启动脚本
[root@dev?env]#?vi?./mysql-5.7.28/support-files/mysql.serverbasedir=/tongfu.net/env/mysql-5.7.28/datadir=/tongfu.net/env/mysql-5.7.28/data/
启动服务
./mysql-5.7.28/support-files/mysql.server?start
修改默认密码
使用初始化时系统返回的信息中最后一行的初始化密码来修改root密码。
./mysql-5.7.28/bin/mysqladmin?-uroot?-p?password?"abcdef"
登录
使用新密码登录
./mysql-5.7.28/bin/mysql?-uroot?-pabcdef
自动启动
添加自动启动脚本
[root@dev?env]#?cat?>?/lib/systemd/system/mysqld.service?<<EOF[Unit]Description=mysqldAfter=network.target[Service]Type=forkingExecStart=/tongfu.net/env/mysql-5.7.28/support-files/mysql.server?startExecReload=/tongfu.net/env/mysql-5.7.28/support-files/mysql.server?restartExecStop=/tongfu.net/env/mysql-5.7.28/support-files/mysql.server?stopPrivateTmp=false[Install]WantedBy=multi-user.targetEOF
使用systemctl管理mysqld服务
systemctl?enable?mysqld?#?设置自动启动systemctl?start?mysqld?#?启动服务systemctl?stop?mysqld?#?停止服务systemctl?restart?mysqld?#?重启服务
命令被添加到系统目录中。
ln?-s?/tongfu.net/env/mysql-5.7.28/bin/mysql?/usr/bin/ln?-s?/tongfu.net/env/mysql-5.7.28/bin/mysqldump?/usr/bin/
常见错误常见错误1
新版mysql中找不到my.cnf配置文件,因为mysql中大部分参数都设置为默认值。原则上我们不需要设置太多的参数。
如果要设置的话,可以从mysql的老版本拷贝过来,放在mysql安装目录下。当然,你也可以像以前一样放在/etc/my.cnf中,但是它不使用管理和迁移。
常见错误2
在mysql的新版本中使用group by语句时有一个限制。简单来说,group by的字段必须出现在select中,这样select * from xxx group by yyy就不行了。
它在功能上不依赖于GROUP BY子句中的列;这与sql_mode=only_full_group_by不兼容
解决方案,在my.cnf中添加一行设置
sql _ mode = & # 8220STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO _ ENGINE _ SUBSTITUTION & # 8221
所以可以随便写~
常见错误3
新版本的mysql在做同步复制的时候,发现server_id已经改了,没有改,一直是4294967295。发生了什么事?经过他们各自的尝试,发现新版mysql的Principle限制了server_id的位数,不能超过10位,否则会溢出。
TNND,能不能向下兼容~ ~
常见错误4
如果你发现导入sql时写入速度很慢,可以从以下几个方面检查
检查 max_allowed_packet 是否设置太小了,这个会影响大 sql 的写入速度,一般情况下 dump 出来的 sql 都是多行用一个 insert 语句执行写入的检查是不是使用的 innodb 引擎的数据表,innodb 数据表写和读都要比 myisam 慢一些检查有没有关闭 log-bin,这玩意没关闭的话导入速度会慢几百倍,上千倍,强烈建议导入数据时候关闭它!!检查 innodb_flush_log_at_trx_commit 有没有设置为 0,这玩意设置了非 0 的值的话导入速度也会慢几十倍,强烈建议导入数据时候关闭它!!
常见错误5
错误2002(hy 000):Can ’如果通过mysql连接数据库时找不到socket文件,则通过socket连接到本地MySQL服务器‘/tmp/MySQL . sock ’(2)解决方案,设置在my.cnf中
使用连接到数据库服务器
使用以下命令连接到MySQL数据库服务器
[root@dev?env]#?mysql?-uroot?-pabcdefmysql:?[Warning]?Using?a?password?on?the?command?line?interface?can?be?insecure.Welcome?to?the?MySQL?monitor.??Commands?end?with?;?or?\g.Your?MySQL?connection?id?is?3Server?version:?5.7.28?MySQL?Community?Server?(GPL)Copyright?(c)?2000,?2019,?Oracle?and/or?its?affiliates.?All?rights?reserved.Oracle?is?a?registered?trademark?of?Oracle?Corporation?and/or?itsaffiliates.?Other?names?may?be?trademarks?of?their?respectiveowners.Type?'help;'?or?'\h'?for?help.?Type?'\c'?to?clear?the?current?input?statement.mysql>
创建数据库
一个数据库服务器可以有多个数据库,每个数据库都作为一个项目的数据存储介质。
使用下面的命令创建一个数据库,Fuge创建一个测试数据库。
mysql>?create?database?test?default?charset?utf8;Query?OK,?1?row?affected?(0.00?sec)
查看数据库列表
使用以下命令查看服务器的数据库列表。该列表包括许多系统数据库,包括我们刚刚创建的测试库。
mysql>?show?databases;+--------------------+|?Database???????????|+--------------------+|?information_schema?||?mysql??????????????||?performance_schema?||?sys????????????????||?test???????????????|+--------------------+5?rows?in?set?(0.00?sec)
选择数据库
我们想选择一个数据库作为我们正在操作的库。
mysql>?use?test;Database?changed
创建数据表
一个数据库可以有多个数据表,每个数据表代表一组相同类型的数据,如用户、消息等。
使用以下命令创建数据表。Fuge创建了一个测试数据表,其中包括两个字段id和name。
mysql>?CREATE?TABLE?`test`?(????->?`id`?int?NOT?NULL?AUTO_INCREMENT,?????->?`name`?varchar(45)?NOT?NULL,?????->?PRIMARY?KEY?(`id`)????->?);Query?OK,?0?rows?affected?(0.00?sec)
插入新数据
现在我们要像这个数据表测试一样插入数据。数据表测试有两个字段,即int类型和varchar类型。我们可以根据这两个字段的类型向它们写入值。
插入如下声明
mysql>?INSERT?INTO?test?(name)?VALUES?('福哥');Query?OK,?1?row?affected?(0.10?sec)
查看数据表数据
现在数据表测试中有一段数据。我们可以通过SQL语句查询数据表,得到数据表中的数据。
查询语句如下
mysql>?SELECT?*?FROM?test;+----+--------+|?id?|?name???|+----+--------+|??1?|?福哥???|+----+--------+1?row?in?set?(0.00?sec)
修改数据表数据
我们可以通过数据表的id准确的修改这一行的数据,因为列id中的数据是唯一的,可以帮助我们准确的定位到具体的一个数据行。
更新语句如下
mysql>?UPDATE?test?SET?name?=?'福哥加油'?WHERE?id?=?1;Query?OK,?1?row?affected?(0.00?sec)Rows?matched:?1??Changed:?1??Warnings:?0
删除数据表数据
如果需要删除数据表中的数据,可以通过数据表的id准确定位到一行数据并删除。
删除语句如下
mysql>?DELETE?FROM?test?WHERE?id?=?1;Query?OK,?1?row?affected?(0.00?sec)
查看数据表数据
再看数据表中的数据,可以看到空空在数据表中是一样的。
mysql>?SELECT?*?FROM?test;Empty?set?(0.00?sec)
退出数据库服务器
操作完成后,您可以退出数据库服务器连接。
mysql>?exitBye
摘要学会了MySQL的技巧,以后就可以做一些很有意思的事情了!目前富哥教的语言c/c++、java、php、python都可以接入MySQL数据库。结合MySQL数据库,可以做一些中大型的项目,包括但不限于一个博客,一个论坛,一个留言板,一个换装游戏,一个情景游戏等等。
接下来,弗莱俱乐部将逐一介绍如何使用c/c++、java、php、python操作MySQL。童鞋一定要跟上~ ~