
在写今天关于数据库的文章之前,还是说一下这近一年来做笔记的感受,我通过这种学习方式:一边学习一边总结笔记,日后方便查看和理解;这一点在我从零基础学习c语言和Linux应用上体现的淋漓尽致,从平时和大家的沟通交流,我能够去通过以前写的笔记,做到温故而知新,同时再给网友讲解里面的原理的时候,又进一步加深了对该知识的理解。 有一句耳熟能详的一句话:好记性不如乱笔头;当我们没有别人那么有天赋,唯一能够改变自己的方式就是:勤奋+方法+执行力+不怕吃苦;总之记笔记的重要性不言而喻。 一、简单聊聊数据库这“仓库”: 老实说,对于大部分做嵌入式的人来说,接触数据库不是很多;数据库对于互联网开发行业来说,运用那是家常便饭了。那么对于我们搞嵌入式的人来说,学习数据库,我觉得刚开始不要太注重理论化的东西,先去学习一下实操,等对实操达到了一个轻车驾熟的入门(算是简单操作的入门)之后,那么这个时候去看理论的东西,就不会太吃力了,你只要根据理论的东西,你有不懂的可以去做实验,这里对理论就会掌握的更加熟练(其实说到这里,可能这是我自己的学习方法,不一定适合你);因为从很多技术群和平时的沟通交流来看,有的时候,特别是现在在这个“浮躁”的时代,能够通过书籍理论去学习新的技能人比较少(至少在我的周围是这样的,但是这个不能一概而论;毕竟世界这么大,奇人异事多了去。),因为大部分人看不下去或者看不懂(我这里举个例子,比如说你去看linux内核的书籍,没有一定的基础打底,你直接去看,那简直就是在看天书,能够看懂多少,每个读者自身体会最为亲切了);所以总体来说,先实践后理论(我这里指的先实践是指通过视频学习,当然视频学习里面,讲师也会讲解理论,然后带你实操;所以理论就指的是,大部分人看视频学习,可能会看几遍,但是一些理论性的东西看视频的人可能并没有掌握,为啥这么说,你看视频学习,一下不能把视频里面那么多信息一下消化掉,所以就要视频后的理论学习巩固了),这是比较合适的去学习一些新东西,当然我这里可能限于嵌入式或者互联网学习方面(各个行业情况不能一概而论)。 好了,上面说的废话有点多,但是还是要废话一下;现在咋们就简单来聊聊数据库这“仓库”。数据库,从字面意思看,库可以想成在农村装粮食的仓库,这个仓库肯定是来放东西,这里的东西就是指数据库了;所以简单来说,这个数据库用来存放东西的,当然能够存东西,也就能够从里面取出东西来;这里关于数据库就简单介绍到这里了,我不希望这系列学习笔记文章分享,太按照理论化或者说完全按照书上那样来分享,更多的是实操来分享。理论的东西说实话,通过写了这么久的公众号也发现到,如果不是理论写的不是很幽默或者很有技术文底的话,大部分人还是只是简单的瞄一下,真正会用心去看的人还是比较少的(我这里说出自己的感受,关键学习的东西还是要靠自己),还是实操性的东西比较直观,也更加通俗易懂。 二、安装mysql数据库: 这里我是ubuntu 14.04-server版本上安装的mysql-server-5.6: 1、安装mysql: sudo apt-get install mysql-server-5.6Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: libdbd-mysql-perl libdbi-perl libhtml-template-perl libmysqlclient18 libterm-readkey-perl mysql-client-5.6 mysql-client-core-5.6 mysql-common mysql-common-5.6 mysql-server-core-5.6 Suggested packages: libclone-perl libmldbm-perl libnet-daemon-perl libplrpc-perl libsql-statement-perl libipc-sharedcache-perl mailx tinyca The following NEW packages will be installed: libdbd-mysql-perl libdbi-perl libhtml-template-perl libmysqlclient18 libterm-readkey-perl mysql-client-5.6 mysql-client-core-5.6 mysql-common mysql-common-5.6 mysql-server-5.6 mysql-server-core-5.6 0 upgraded, 11 newly installed, 0 to remove and 50 not upgraded. Need to get 21.6 MB of archives. After this operation, 167 MB of additional disk space will be used. Do you want to continue? [Y/n] y 在这个安装过程中,会跳出要你设置mysql的登入密码(当然还要重复输入一遍密码): ![]() 2、进入mysql: 在安装完毕之后,我们就可以来进入mysql,这里进入mysql有两种形式: (1)第一种形式: txp@ubuntu:~$ mysql -u root -pEnter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 45 Server version: 5.6.33-0ubuntu0.14.04.1 (Ubuntu) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> 注解:“-u”表示登入的用户名,"-p"表示用户登入的密码。 (2)第二种形式: txp@ubuntu:~$ mysql -u root -p1121518woWarning: 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 46 Server version: 5.6.33-0ubuntu0.14.04.1 (Ubuntu) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> 注解:这里我在"-p"后面直接输入登入密码,就不会再叫你输入密码了。 3、开始进行实践了: (1)列出当前数据库服务器(mysql-server-5.6)里面到底有多少数据库种类(应该说当前数据库服务器里面能够使用数据库): mysql> show databases;+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | +--------------------+ 3 rows in set (0.10 sec) 注解:这里可以看到我们可以有三个数据库可用。同时还要注意一下,show databases后面有一个“;”分号,在mysql里面每写一条语句都有";",这和我们写c和c++里面的语法知识一样,每条语句后面必须加";",不然就会报错。 (2)使用mysql: mysql> use mysql;Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed (3)显示mysql中的数据表: 表又是啥呢,你可以联系一下我们平时做execl表格,这里的表就类似execl表格,这个表格里面每行和每列都有数据,当然所代表的意思也不同: mysql> show tables;+---------------------------+ | Tables_in_mysql | +---------------------------+ | columns_priv | | db | | event | | func | | general_log | | help_category | | help_keyword | | help_relation | | help_topic | | innodb_index_stats | | innodb_table_stats | | ndb_binlog_index | | plugin | | proc | | procs_priv | | proxies_priv | | servers | | slave_master_info | | slave_relay_log_info | | slave_worker_info | | slow_log | | tables_priv | | time_zone | | time_zone_leap_second | | time_zone_name | | time_zone_transition | | time_zone_transition_type | | user | +---------------------------+ 28 rows in set (0.01 sec) 4、图解上面说到的服务器数据库、数据库、数据表的关系: ![]() 注解:这里的关系是:数据库服务器包含数据库(databases),而数据库又包含数据表(table)。 5、在实际后台开发的过程中,我们的数据库不是和我们程序员写的代码放在一起的,这里我们用一张来分析: ![]() 注解:这里我们只要简单明白,我客户端通过通信协议和我们业务代码进行对接,业务代码(也就是节点服务器)再向数据库服务器里面拿自己想要的东西来返回给客户端就行,具体里面涉及到的原理,咋们现在不要去关。 6、使用mysql workbench进行远程连接数据库服务器: 当然关于这个mysql workbench的安装,读者可以直接去mysql的官方下载,然后直接按照网上教程走就行,基本都是“傻瓜式”操作,没啥要注意的地方。 现在我们来用这个软件连远程连接mysql-server-5.6: (1) ![]() (2) ![]() (3)这里我的远程数据库服务器地址是(192.168.40.154): ![]() 注解:这里我们发现连接不上。 (4)进行相关的配置: txp@ubuntu:~$ cd /etc/mysql/txp@ubuntu:/etc/mysql$ ls conf.d debian.cnf debian-start my.cnf txp@ubuntu:/etc/mysql$ sudo vim my.cnf ![]() 注解:关于这个回环地址(127.0.0.1),它的意思机器本身内部来使用,外部不能通过这个地址来访问我们的机器,所谓的内部使用的意思是说,该机器本身的两个进程之间可以通过这个地址进行通信。 现在我们重新启动一下mysql试试看能不连接上: txp@ubuntu:/etc/mysql$ sudo /etc/init.d/mysql restartmysql stop/waiting mysql start/running, process 3546 然后还是会出现连接不上: ![]() (5)再进行配置:
![]() +-----------+------+ | Host | User | +-----------+------+ | 127.0.0.1 | root | | ::1 | root | | localhost | root | | ubuntu | root | +-----------+------+ 4 rows in set (0.00 sec) ![]() 说明:这里修改了这个配置还是连接不上。于是乎我们就来创建一个用户来实现这个功能了 mysql> create user 'txp'@'%' identified by '1121518wo';Query OK, 0 rows affected (0.01 sec) mysql> select Host, User from user; +-----------+------------------+ | Host | User | +-----------+------------------+ | % | txp | | 127.0.0.1 | root | | ::1 | root | | localhost | debian-sys-maint | | localhost | root | | ubuntu | root | +-----------+------------------+ 6 rows in set (0.00 sec) 注解:%表示任意的地址。 ![]() 说明:这里可以看到连接成功,哈哈。一般我们操作也是普通用户来操作,最后不用root用户来操作。 (6)进行连接: ![]() 连接进入界面的显示: ![]() 然后在里面进行操作: ![]() 注解:这说明我们现在用户txp权限不够。 赋予这个用户txp权限: mysql> grant select on mysql.* to 'txp'@'%';Query OK, 0 rows affected (0.00 sec) 现在看看能不能进行操作了: ![]() 注解:操作成功,当然这里也可以赋予该用户所有的权限: mysql> grant all privileges on *.* to 'txp'@'%';Query OK, 0 rows affected (0.00 sec) 三、总结: 本次的mysql学习分享就到这里了 |