MySQL[mariadb]数据库入门知识
**一、 mariadb安装 **
MySQL5系列数据库是MySQL的最新版本的数据库,比较流行的发行版是mysql-5.0.18。MySQL 英文官方网站是http://www.mysql.com
MariaDB 是一个开源的关系型数据库管理系统,向后兼容,可替代 MySQL。命令几乎与MySQL相同
Linux下安装,以Ubuntu为例:
sudo apt update && sudo apt install mariadb-server mariadb-client
sudo apt-get install php8.1-mysql #安装对应的phpX.X-mysql 这算是php,mysql连接扩展,
启动:
systemctl start mariadb.service
开机启动:
systemctl enable mariadb.service
**二、连接和登陆 **
连接:
以用户(-u)root登陆,使用密码(-p)登陆host的数据库,如刚安装的默认root无密码
mysql -h host -u root -p
开启远程访问:
在 /etc/mysql/mariadb.cnf 、/etc/mysql/conf.d/.cnf 、/etc/mysql/mariadb.conf.d/.cnf文件中查找并注释掉“skip-networking”、“bind-address”两项:
sudo grep -rn "skip-networking" /etc/mysql/*
查看用户:
select user,host from mysql.user;
用户列表,可看到root用户只能在localhost内登陆,所以远程无法登陆,
+------+-----------+
| user | host |
+------+-----------+
| root | localhost |
+------+-----------+
修改权限:‘%’为任意,修改为“%”,则是所有IP可登陆,如只需IP段则:‘root’@’192.168.1.%’,只请允许192.168.1.*段可登陆
grant all privileges on *.* to "root"@'%' identified by 'password' with grant option;
但是这样就会让root有两个主机域:
+-------------+-----------+
| User | Host |
+-------------+-----------+
| root | % |
| mariadb.sys | localhost |
| mysql | localhost |
| root | localhost |
+-------------+-----------+
矛盾中,依然无法远程登陆。
只有删除root行,再来一次
delete from mysql.user where User='root';
grant all privileges on *.* to "root"@'%' identified by 'password' with grant option;
flush privileges;
这个才能远程访问。
最后运行命令:
flush privileges;
sudo service mysql restart
sudo service mariadb restart
三、数据库操作
每条数据库命令最后都要使用分号”;”
查看数据库:
show database;
使用(选择)数据库:
use mydatabase;
创建数据库:
CREATE DATABASE 数据库名;
删除数据库:
drop database <数据库名>;
退出:exit
四、数据表操作
查看表:
use web; #进入web表
show tables;
MariaDB [(none)]> use web;
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
MariaDB [web]> show tables;
+---------------+
| Tables_in_web |
+---------------+
| account |
| pay |
| server |
+---------------+
3 rows in set (0.000 sec)
查看列:
MariaDB [web]> show columns from account;
+----------+----------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(32) | NO | PRI | NULL | |
| password | char(32) | NO | | NULL | |
| question | varchar(64) | YES | | NULL | |
| answer | varchar(64) | YES | | NULL | |
| email | varchar(64) | YES | | NULL | |
| qq | varchar(16) | YES | | NULL | |
| tel | varchar(16) | YES | | NULL | |
| id_type | enum('IdCard') | YES | | IdCard | |
| id_card | varchar(32) | YES | | NULL | |
| point | int(11) | NO | | 0 | |
+----------+----------------+------+-----+---------+----------------+
11 rows in set (0.006 sec)
修改表中某字段的值
语法:
update 表名 set 待修改字段=某一值 where 条件
EG:
update account set point=1000 where name=123456
义:将name为123456的字段poin设置为1000
(这也是天龙八部中用mysql命令增加用户点数的方法)
五、备份与恢复
常规备份命令是mysqldump,这里以mydatabase数据库为例,做简单介绍,
备份:指定数据库备份到tm_20060101.sql
mysqldump -u root -p mydatabase < tm_20060101.sql
可以利用gzip压缩数据:
mysqldump -u root -p tm | gzip < tm_20060101.sql.gz
还可以备份到远程机器,用-h制定,如
mysqldump -u root -p tm < tm_20060101.sql -h xxx.xxx.xxx.xxx
可以直接备份到IP地址为xxx.xxx.xxx.xxx的远程计算机。
恢复数据:系统崩溃,重建系统,或恢复数据库时,可以这样恢复数据:
mysql -u root -p tm < tm sql
从压缩文件直接恢复:
gunzip < tm sqlgz mysql -u root -p tm
从*.sql 恢复:
mysql> use mydb;
mysql> source /home/ch/mydb.sql
备份整个数据库:
mysqldump -u username -p --all-databases > /home/BackupName.sql
恢复数据库:
mysql -u root -p < /home/backup.sql
六、php扩展
php连接数据库是会出现以下错误:
connection failedcould not find driver
linux pdo no value,等,则是php扩展未安装:
sudo apt install php8.1-mysql
MySQL 8.0修改密码
最近系统升级牵涉到MySQL升级,需要升级到 MySQL 8.0,涉及MySQL用户的密码修改,特地记录一下!
MySQL 8.0前修改密码
在MySQL 8.0前,执行:SET PASSWORD=PASSWORD(‘[新密码]’) 进行密码修改,在MySQL 8.0后,以上的方法使用root用户修改别的用户密码是报错的,因为MySQL 8.0后修改了修改密码的方式!
mysql> use mysql;
mysql> update user set password=password('新密码') where user='用户名';
或者
mysql> update mysql.user set authentication_string=password('新密码') where user='用户名';
mysql> flush privileges; --刷新MySQL的系统权限相关表
MySQL 8.0后修改密码
MySQL 8.0修改密码步骤:
- 以 root 用户登录MySQL。
- 进入MySQL系统自带数据库: mysql 数据库中。
- 执行更改密码语句。
- 退出MySQL后,使用新的密码重新登陆。
具体语句如下:
[root@localhost ~]# ./bin/mysql -u root -p '原来的密码'
mysql> show databases;
mysql> use mysql;
mysql> ALTER USER '用户名'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
mysql> flush privileges; --刷新MySQL的系统权限相关表
mysql> exit;
七、FAQ
Q:为什么我下在的“安装程序”里面没有安装文件?
A:你下载的可能是免安装版本。请给出详细的版本信息。
Q:如何启动和关闭mysql?
A:linux下:比如我的mysql是用源码方式安装在/usr/local/mysql
自动:将/usr/local/mysql/share/mysql/mysql.server拷贝到/etc/rc.d/init.d/下,然后
chkconfig –add mysql.server就可以开机就启动mysql服务了。
手动:以root身份执行/usr/local/mysql/bin/mysqld_safe –user=mysql
windows下:
自动:
用cmd方式,到mysql安装路径的bin文件夹下,执行:mysqld-nt –install
手动:直接到到mysql安装路径的bin文件夹下执行net start mysql即可。
如果不想让mysql在计算机启动时候就启动服务,执行:mysqld-nt –remove
也可以在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services中删除对应服务并重启计算机。
关闭mysql:mysqladmin -uroot -p shutdown
启动mysql:
mysqld-nt –install
net start mysql
Q:如何修改mysql的用户密码?
A :在这里请区分连接mysql数据库的用户密码和系统的用户密码!!
mysql -uroot -p
输入密码
#登录mysql
password=password(“new_pass”) where user=”userName”; #userName换成你要修改的用户名的密码,比如root
Q:如何登录mysql?
A:mysql -uroot -p回车后,输入密码,再回车即可。如果自己没有修改的话,默认密码为空。
Q:mysql如何很好的变成图形化数据库呢?自身有自带的图形化工具没有?
A:mysql自带一个字符的客户端,但是还有好多的像mysql_center、SQLyog、phpMyAdmin、Mysql Query Browser,Mysql Administrator、mysqlcc这样好的图形管理工具。
mysql_centerd在本站的下载地址:http://bbs.mysql.cn/thread-517-1-1.html
SQLyog去网上搜索,很多的,SQLyog407版本不错。
phpMyAdmin下载地址:http://download.mysql.cn/opencode/2006/0207/55.html
mysql.com提供的管理软件下载地址:http://dev.mysql.com/downloads/gui-tools/5.0.html
其它的我就不一一提供下载地址,自己到网上搜索下载。
Q:为什么用mysql -uusername -p登录mysql服务器时出现如下提示:
Host ‘xxx.xxx.xxx.xxx’ is not allowed to connect to this MySQL server!(“xxx.xxx.xxx.xxx”代表要登录的服务器)
A:这是因为你要登录的mysql服务器不允许用户username从xxx.xxx.xxx.xxx这个ip地址登录。
解决办法是在服务器登录mysql,操作步骤为:
mysql -uroot -p
(输入密码)
use mysql
update user set Host=”%” where User=”username”;
flush privileges;
Q:什么是phpMyAdmin?
A:phpMyAdmin 是一个用PHP编写的,可以通过互联网控制和操作MySQL。通过phpMyAdmin可以完全对数据库进行操作,例如建立、复制/删除数据等等。
有了phpMyAdmin 就可以完全不使用mysql命令,直接使用phpMyAdmin就能管理mysql的所有数据和数据库
Q:如何使用phpMyAdmin?
A:要使用phpMyAdmin,下载后,把它释放到web服务器的根目录下,取个名字,比如就叫phpMyAdmin,然后在浏览器的地址栏输入:
http://X.X.X.X/phpMyAdmin/index.php
就可以了。
如果是phpMyAdmin 2.8.0.2以上版本的,这样使用会报错,因为默认没有这个软件需要的配置文件config.default.php,在2.6.X版本下都有这个文件,只是口令不对。对于2.6.X版本的,可以直接用文本编辑器打开这个文件,把其中第一个$cfg中内容修改成自己的用户名及密码就可以了:
$cfg[‘Servers’][$i][‘auth_type’] = ‘config’; // Authentication method (config, http or cookie based)?
$cfg[‘Servers’][$i][‘user’] = ‘root’; // MySQL user
$cfg[‘Servers’][$i][‘password’] = ‘自己的密码’;
不设置密码的话,系统会提示:
Access denied for user ‘root‘@’localhost’ (using password: NO)
如果是2.8.0.2版本的,程序会提示请运行scripts/setup.php或者index.php这样的文件进行配置以生成config.inc.php文件。
Q:为什么我使用mysql出现乱码?
A:安装mysql5时默认的字符集是瑞典编码latin1,不支持中文。并且出现乱码的原因很多,建议到bbs.mysql.cn论坛寻找答案。发贴的话请详细说明自己的环境、安装过程及使用的信息,以便大家能快速分析你的问题。
Q:如何修改字符集?
A:
mysql -uroot -p
输入密码
选择你的目标数据库
mysql< use dbname
显示当前字符集
mysql< show variables like ‘%char%’;
+————————–+—————————————-+
| Variable_name | Value |
+————————–+—————————————-+
| character_set_client | gb2312 |
| character_set_connection | gb2312 |
| character_set_database | gb2312 |
| character_set_results | gb2312 |
| character_set_server | gb2312 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/mysql/charsets/ |
+————————–+—————————————-+
7 rows in set (0.00 sec)
最好是保持字符集统一。如果你要修改哪个字符集,用set命令,如:
mysql< set character_set_client gbk;
Query OK, 0 rows affected (0.00 sec)
mysql< show variables like ‘%char%’;
+————————–+—————————————-+
| Variable_name | Value |
+————————–+—————————————-+
| character_set_client | gbk |
| character_set_connection | gb2312 |
| character_set_database | gb2312 |
| character_set_results | gb2312 |
| character_set_server | gb2312 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/mysql/charsets/ |
+————————–+—————————————-+
再改回来:
mysql< set character_set_client=gb2312;
Query OK, 0 rows affected (0.00 sec)
mysql< show variables like ‘%char%’;
+————————–+—————————————-+
| Variable_name | Value |
+————————–+—————————————-+
| character_set_client | gb2312 |
| character_set_connection | gb2312 |
| character_set_database | gb2312 |
| character_set_results | gb2312 |
| character_set_server | gb2312 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/mysql/charsets/ |
+————————–+—————————————-+
7 rows in set (0.00 sec)
自己试试就知道了。
Q:为什么我的phpmyadmin提示不能载入mysql扩展?
A: 一、看下你的PHP目录和PHP\EXT下有没有php_mysql.dll这个文件。
二、配制一下环境变量把php_mysql.dll所在的目录加入的PATH里。
三、有的php安装程序安装好以后,在安装路径下,并没有ext文件夹(不知道为什么),最好下载个配置的php,然后,将exe文件夹拷贝到安装目录下,再进行相应的配置。
四、看一下c:\winnt 或者是 c:\windows下的php.ini文件里的php_mysql.dll前面的;(分号)是否去掉了,如果没有去掉请去掉,然后,将mysql安装路径下bin文件夹下的libmysql.dll放在安装php的根目录一般为C:\php ,同时也在 C:\windows 下也放各一个,之后重新启动IIS或者是APACHE。有的时候总是刷新一页,即使去掉分号也还是不能载入mysql扩展,最后新打开一个窗口,再试。
Q:为什么提示:”没有发现 PHP 的扩展设置mbstring, 而当前系统好像在使用宽字符集。没有 mbstring 扩展的 phpMyAdmin 不能正确识别字符串,可能产生不可意料的结果.”
A:因为你没有打开mbstring在扩展,解决办法:打开php的配置文件php.ini,将
extension=php_mbstring.dll前面的分号”;”去掉,并改到正确的路径,一般为
ext/php_mbstring.dll
Q:为什么PHP连接mysql会有下面的提示?
Fatal error: Call to undefinedfunction mysql_connect() ……
A:很有可能是没有载入mysql扩展,如何解决,请参考上面的方法。
因为如果你的系统没有载入mysql扩展的话,phpmyadmin能给出提示,而一般的程序则不能给出。
如果phpmyadmin没有给出提示,而你恰好用的apache服务器,尝试一下方法:
首先是去掉;extension=php_mysql.dll前面的“;”(;为注释)
第二步是将C:\php\ext中的php_mysql.dll复制到C:\WINDOWS(C:\WINNT)中即可,
并重起Apache。
Q:为什么我不能看孵化池资料?
A:MYSQL.CN的孵化池是专门为初学者提供学习的地方,这里我就不多介绍了,详情请访问:http://bbs.mysql.cn/thread-369-1-1.html。
Q:能中文数据库名称么?
A:可以,但是不推荐,用起来不方便。
Q:如果我忘记了root密码,怎么办?
A:
在windows下:
打开命令行窗口,停止mysql服务: Net stop mysql
启动mysql,一般到mysql的安装路径,找到 mysqld-nt.exe
执行:mysqld-nt –skip-grant-tables
另外打开一个命令行窗口,执行mysql
用Ctrl+Alt+Del,找到mysqld-nt的进程杀掉它,在重新启动mysql-nt服务,就可以用新密码登录了
在linux下:
如果 MySQL 正在运行,首先杀之: killall -TERM mysqld。
启动 MySQL :bin/safe_mysqld –skip-grant-tables &
就可以不需要密码就进入 MySQL 了。
然后就是
重新杀 MySQL ,用正常方法启动 MySQL 。
Q:为什么出现如下的提示:
[root@0-8-2-df-fa-ee ~]# mysql
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)
注:也可能是其它路径下的mysql.sock
A:说明mysql服务没有启动,mysql.sock是mysql服务启动后启动生成的文件,
一般先杀掉mysql服务:killall mysql
然后,再根据自己的安装情况启动mysql即可。比如,安装的时候,用的是
./configure –prefix=/usr/local/mysql的
用下面的命令启动:
/usr/local/mysql/bin/mysqld_safe –user=mysql &
之后再去执行/usr/local/mysql/bin/mysql -u root -p 登录进入mysql数据库
还不行的话,一次执行下面的命令:
sync
reboot ;重启计算机,执行时请小心!!!
Q:为什么出现下面的错误
#1251 - Client does not support authentication protocolrequested by server; consider upgrading MySQL client
A:你使用的数据库是4.1以上,用命令行连接MySQL数据库后,执行下面的命令:
UPDATE mysql.user SET password=OLD_PASSWORD(“your_password”) WHERE Host=”your_host” AND User=”your_username” ;
即可解决。
your_password:改成你连接数据库的密码,比如 123
your_host:改成你连接数据库的主机,如果是本地的话,就是localhost
your_username:改成你连接数据库的用户,比如 root
Q:为什么mysql提示我:Data too long for column ……
A:首先确保你的数据大小符合你的字段大小。
再检查你的数据库编码,数据库的编码是否与操作数据库工具的编码一致!
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 vault@coolxy.cn