MySQL 内建直接看 status 就可以看到系统常见讯息, 如下述范例:
1.$ mysql -u root -p
2.mysql>s
“Threads: 2 Questions: 224857636 Slow queries: 229 Opens: 1740 Flush tables: 1 Open tables: 735 Queries per second avg: 137.566
$ mysql -u root -p -e "status" # s = status,
用这个也会列出上述结果.
看他们网上的,写得都是千篇一律,同时,好多也写得不是很好,下面是我自己总结的有关mysql的使用细节,也是我在学习过程中的一些记录吧,希望对你有点帮助,后面有关存储过程等相关 *** 作还没有总结好,下次总结好了再发给你吧,呵呵~~~~~MySql学习笔记
MySql概述:MySql是一个种关联数据库管理系统,所谓关联数据库就是将数据保存在不同的表中,而不是将所有数据放在一个大的仓库中。这样就增加了速度与提高了灵活性。并且MySql软件是一个开放源码软件。
注意,MySql所支持的TimeStamp的最大范围的问题,在32位机器上,支持的取值范围是年份最好不要超过2030年,然后如果在64位的机器上,年份可以达到2106年,而对于date、与datetime这两种类型,则没有关系,都可以表示到9999-12-31,所以这一点得注意下;还有,在安装MySql的时候,我们一般都选择Typical(典型安装)就可以了,当然,如果还有其它用途的话,那最好选择Complete(完全安装)在安装过程中,一般的还会让你进行服务器类型的选择,分别有三种服务器类型的选择,(Developer(开发机)、Server Machine(服务器)、Dedicated MySql Server Machine(专用MYSQL服务器)),选择哪种类型的服务器,只会对配置向导对内存等有影响,不然其它方面是没有什么影响的;所以,我们如果是开发者,选择开发机就可以啦;然后接下来,还会有数据库使用情况对话框的选择,我们只要按照默认就可以啦;
连接与断开服务器:
连接:在windows命令提示符下输入类似如下命令集:mysql –h host –u user –p
例如,我在用的时候输入的是:mysql –h localhost –u root –p
然后会提示要你输入用户密码,这个时候,如果你有密码的话,就输入密码敲回车,如果没有密码,直接敲回车,就可以进入到数据库客户端;连接远程主机上的mysql,可以用下面的命令:mysql –h 159.0.45.1 –u root –p 123
断开服务器:在进入客户端后,你可以直接输入quit然后回车就可以了;
下面就数据库相关命令进行相关说明
你可以输入以下命令对数据库表格或者数据库进行相关 *** 作,在这里就省略了,然后直接进行文字说明了;
Select version(),current_date//从服务器得到当前mysql的版本号与当前日期
Select user() //得到当前数据库的所有用户
Use databasename 进入到指定的数据库当中,然后就可以 *** 作这个数据库当中的表格了
Show databases //查询目前数据库中所有的数据库,并且显示出来;
Create batabase databasename创建数据库,例如:create database manager
Show tables //查看当前数据库中的所有表格;
Create table tablename(colums)创建表,并且给表指定相关列,例如:create table pet(name varchar(20),owner varchar(20),species varchar(20),sex char(1),birth date,death date)
Describe tablename将表当中的所有信息详细显示出来,例如:describe pet
可以用命令一次插入多条记录,例如:
Insert into pet values(‘Puffball’,’Diane’,’hamster’,’f’,’1993-12-3’,null),( ‘Puffball’,’Diane’,’hamster’,’f’,’1993-12-3’,now())
Select * from pet 从pet表当中查询出所有的记录,显示出来;
Delete from pet where id=1删除ID为1的那一条记录;
Update pet set birth=’2001-1-3’ where name=’Bowser’更新name为Bowser的记录当中的birth字段的值;
Select distinct owner from pet从pet表中选择出owner字段的值唯一的行,如果有多行记录这个字段的值相同,则只显示最后一次出现这一值的一行记录;
有关日期计算:
Select name,birth,curdate(),(year(curdate())-year(birth)) as age from pet
此处,year()函数用于提取对应字段的年份,当然类似的还有month(),day()等;
在mysql当中,sql语句可以使用like查询,可以用”_”配任何单个字符,用”%”配任意数目字符,并且SQL模式默认是忽略大小写,例如:select * from pet where name like ‘%fy’
当然也可以用正则表达式模式进行配。
同时在sql当中,也要注意分组函数、排序函数、统计函数等相关用法,在这里只列举一二;
Select species,count(*) from pet group by speceis
Select * from pet order by birth desc
查询最大值的相关 *** 作:
Select max(age) from pet
取前多少项记录,这个主要用于分页查询 *** 作当中,
Select * from pet order by birth desc limit 3取前三条记录,
Select * from pet order by birth desc limit 0,3这个可以用于分页查询,limit后面的第一个参数,是起始位置,第二个参数是取记录条数;
有关创建表格自增长字段的写法:
Create table person(id int(4) not null auto_increment,name char(20) not null,primary key (id))
修改表 *** 作:
向表中增加字段:注意,在这个地方,如果是增加多个字段的时候,就要用括号括起来,不然会有问题,如果是单个字段的话,不用括号也没事;
Alter table test add(address varchar(50) not null default ‘xm’,email varchar(20) not null)
将表中某个字段的名字修改或者修改其对应的相关属性的时候,要用change对其进行 *** 作;
Alter table test change email email varchar(20) not null default ‘zz’//不修改字段名
Alter table test change email Email varchar(30) not null//修改字段名称
删除表中字段:
Alter table test drop email//删除单个字段
Alter table test drop address,drop email//删除多列
可以用Drop来取消主键与外键等,例如:
Alter table test drop foreign key fk_symbol
删除索引:
Drop index index_name on table_name
例如:drop index t on test
向表中插入记录:注意,当插入表中的记录并不是所有的字段的时候,应该要在前面列出字段名称才行,不然会报错;
Insert into test(name) values(‘ltx’)
Insert into test values(1,’ltx’)
也可以向表中同时插入多列值,如:
Insert into test(name) values(‘ltx’),(‘hhy’),(‘xf’)
删除表中记录:
Delete from test//删除表中所有记录;
Delete from test where id=1//删除表中特定条件下的记录;
当要从一个表或者多个表当中查询出一些字段然后把这些字段又要插入到另一个表当中的时候,可以用insert …..select语法;
Insert into testt(name) (select name from test where id=4)
从文件中读取行插入数据表中,可以用Load data infile语句;
Load data infile ‘test.txt’ into table test
可以用Describe语法进行获取有关列的信息;
Describe test//可以查看test表的所有信息,包括对应列字段的数据类型等;
MySql事务处理相关语法;
开始一项新的事务:start transaction或者begin transaction
提交事务:commit
事务回滚:rollback
set autocommit true|false 语句可以禁用或启用默认的autocommit模式,只可用于当前连接;
例子:
Start transaction
Update person set name=’LJB’ where id=1
Commit | rollback
数据库管理语句
修改用户密码:以root用户为例,则可以写成下面的;mysql –u root –p 旧密码 –password 新密码
Mysql –u root –password 123;//将root用户的密码修改成123,由于root用户开始的时候,是没有密码的,所以-p旧密码就省略了;
例如修改一个有密码的用户密码:mysql –u ltx –p 123 –password 456;
增加一个用户test1,密码为abc,让他可以在任何时候主机上登陆,并对所有数据库有查询、插入、修改、删除的权限。
Grant select,insert,update,delete on *.* to test1@”%” identified by ‘abc’
增加一个test2用户,密码为abc,让他只可以在localhost上登陆,并且可以对数据库进行查询、插入、修改、删除 *** 作;
Grant select,insert,update,delete on mydb.* to test2@localhost identified by ‘abc’
如果不想让用户test2有密码,可以再输入以下命令消掉密码:
Grant select,insert,update,delete on mydb.* to test2@localhost identified by “”
备份数据库常用命令:mysqldump –h host –u username –p dbname>保存路径与文件名
然后回车后,会让你输入用户密码,输入密码后,再回车就OK啦;
Mysqldump –hlocalhost –uroot –p test >E:\db\test.sql
这一命令具体解释下:
这个命令就是备份test数据库,并且将备份的内容存储为test.sql文件,并且保存在E:\db下面;
命令当中-p 前面的test是数据库名,然后在数据库名后面要跟上一个”>”,然后接下来,就是写要保存的位置与保存文件的文件名;
将备份好的数据库导入到数据库当中去:也就是运行.sql文件将数据库导入数据库当中去->
首先你得创建数据库,然后运行如下命令:mysql –hlocalhost –uroot –p linux<E:\db\test.sql然后回车,再输入密码就可以啦;
解释下上面的命令:linux是就要导入的数据库名字,然后后面要紧跟着“<”符号,然后后面就是要导入的数据库文件;
将数据库导出保存成XML文件、从XML文件导入数据到数据库:
导出表中数据:mysql –X –h hostName –u userName –p Pwd –e “use DatabaseNamesql” >xml文件名
或者用另外一种方式也行:mysqldump –xml –h hostName –u userName –p pwd dbName tableName //这一种只用于显示在当前的mysql客户端,不保存到文件当中;
相关说明:-X代表的是文件的格式是XML,然后-e一写不能掉,还有就是要用双引号将要 *** 作的语句括起来;单引号不行;
例如:mysql –X –hlocalhost –uroot –p –e “use test;select * from pet;”>E:\db\out.xml
从XML文件导入数据到数据库:
Insert into tableName values(1,load_file(‘filepath’))
例如:insert into pet values(1,load_file(“E:\db\out.xml”))
查看数据库状态与查询进程:
Show status//查看状态
Show processlist//查看进程
更改用户名,用以下命令:
Update set user=”新名字” where user=”旧用户名”;
给数据库用户设置管理员权限:
Mysqladmin –h host –u username –p pwd
以root用户为例;
Mysqladmin –h localhost –u root –p 123
存储过程与函数
存储程序和函数分别是用create procedure和create function语句,一个程序要么是一个程序要么是一个函数,使用call语句来调用程序,并且程序只能用输出变量传回值;
要想在MySql5.1中创建子程序,必须具有create routine权限,并且alter routine和execute权限被自动授予它的创建者;
创建存储过程:
首先声明分隔符,所谓分隔符是指你通知mysql客户端你已经输入一个sql语句的字符或字符串符号,在这里我们就以“//”为分隔符;
Delimiter 分隔符\
如:delimiter //
再创建存储过程:
Create procedure 存储过程名 ( )
声明存储过程开始:
begin
然后开始写存储过程体:
Select * from pet
结束存储过程:
End//
刚刚的例子全部写出来,完整的代码就是:
Delimiter //
Create procedure spt () //注意,这个地方,存储过程名与括号之间要有个空格
Begin
Select * from pet
End//到这里,整个存储过程就算写完啦
执行存储过程:
Call 存储过程名 ()//
如,我们执行刚刚创建的存储过程,就是:
Call spt ()//
需要说明的是存储过程名后面一定要加个空格,而后面那个括号,则是用于传送参数的参数列表;另外,我们创建存储过程完成后,也只是创建了,但是只有调用call 存储过程名 ()//后才算执行完毕,才能看到存储过程的结果;
第1步 – 将Galera存储库添加到所有服务器MySQL,修补包括Galera集群,不包括在默认的Ubuntu存储库,所以我们将开始通过添加由Galera项目维护的外部Ubuntu存储库到所有三个服务器。
注:Codership背后的公司Galera Cluster,维护该库,但并非所有的外部存储库是可靠的。确保只从可信来源安装。
首先,我们需要添加的存储库密钥apt-key命令,该命令的apt-get将用于验证该包是真实的。
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 44B7345738EBDE52594DAD80D669017EBC19DDBA
一旦我们在每个服务器的数据库中拥有可信密钥,我们就可以添加存储库。我们需要运行apt-get update ,以包括封装在新的仓库后体现:
sudo add-apt-repository 'deb [arch=amd64,i386] http://releases.galeracluster.com/ubuntu/ xenial main'
sudo apt-get update
您可能会看到一个警告,签名uses weak digest algorithm (SHA1) 有GitHub上一个开放的问题,解决这个(https://github.com/codership/mysql-wsrep/issues/272)。在此期间,可以继续。
一旦在所有三个服务器上更新了存储库,我们就可以安装MySQL和Galera。
第2步 – 在所有服务器上安装MySQL和Galera
在所有三台服务器上运行以下命令安装一个版本的MySQL修补程序与Galera,以及Galera和几个依赖关系:
sudo apt-get install galera-3 galera-arbitrator-3 mysql-wsrep-5.6
在安装过程中,将要求您设置MySQL管理用户的密码。 无论您选择什么,一旦复制开始,此根密码将被第一个节点的密码覆盖。
我们应该拥有所有必要开始配置集群件,但由于我们将依托rsync在后面的步骤,让我们确保它安装在所有这三个,以及..
sudo apt-get install rsync
这将确认的最新版本rsync已经可用,或提示您升级或安装。
一旦我们在三个服务器的每一个上安装了MySQL,我们就可以开始配置。
第3步 – 配置第一个节点
集群中的每个节点都需要具有几乎相同的配置。 因此,我们将在我们的第一台机器上进行所有配置,然后将其复制到其他节点。
默认情况下,MySQL的配置检查/etc/mysql/conf.d目录从截至获取其他配置设置.cnf 。 我们将在此目录中创建一个具有所有特定于集群的指令的文件:
sudo nano /etc/mysql/conf.d/galera.cnf
将以下配置复制并粘贴到文件中。 您将需要更改以红色突出显示的设置。 我们将解释每个部分的含义如下。
/etc/mysql/conf.d/galera.cnf在第一个节点
[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# Galera Cluster Configuration
wsrep_cluster_name="test_cluster"
wsrep_cluster_address="gcomm://first_ip,second_ip,third_ip"
# Galera Synchronization Configuration
wsrep_sst_method=rsync
# Galera Node Configuration
wsrep_node_address="this_node_ip"
wsrep_node_name="this_node_name"
第一部分修改或再声称MySQL的设置,将允许群集正常工作。 例如,Galera Cluster不会的MyISAM或类似的非事务性存储引擎工作, mysqld不能绑定到的IP地址本地主机。 您可以了解Galera Cluster上进行更详细的设置系统配置页面(http://galeracluster.com/documentation-webpages/configuration.html)。
在“加莱拉提供程序配置”部分配置,提供了一个写设置复制API MySQL的组件。 这意味着Galera在我们的情况下,因为Galera是一个wsrep(写集复制)提供程序。 我们指定常规参数以配置初始复制环境。 这不需要任何定制,但你可以了解更多有关加莱拉配置选项(http://www.codership.com/wiki/doku.php?id=galera_parameters)。
在“加莱拉群集配置”部分定义集群,确定通过IP地址或可解析域名,为群集创建一个名字集群成员保证成员加入正确的组。 您可以更改wsrep_cluster_name的东西比更有意义test_cluster或保留原样,但你必须更新wsrep_cluster_address与三个服务器的地址。 如果您的服务器具有专用IP地址,请在此处使用。
在“加莱拉同步配置”部分定义集群如何通信和同步成员之间的数据。 这仅用于在节点联机时发生的状态传输。 对于我们的初始设置,我们使用的是rsync ,因为它是常用的和做什么,我们需要现在。
在“加莱拉节点配置”部分明确了IP地址和当前服务器的名称。 这在尝试诊断日志中的问题以及以多种方式引用每个服务器时很有用。 该wsrep_node_address必须你在机器的地址相匹配,但你可以选择你,以帮助您识别在日志文件中的节点想要的任何名称。
当您对群集配置文件满意后,将内容复制到剪贴板中,保存并关闭文件。
接下来,/etc/mysql/my.cnf设置绑定地址为127.0.0.1。 这必须按顺序注释掉为我们在我们的galera.cnf`文件中正确设置它..
sudo nano /etc/mysql/my.cnf
/etc/mysql/my.cnf
. . .
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
# bind-address = 127.0.0.1
. . .
现在第一个服务器已配置,我们将继续到下两个节点。
第4步 – 配置剩余节点
在每个其余节点上,打开配置文件:
sudo nano /etc/mysql/conf.d/galera.cnf
粘贴到从第一个节点复制的配置中,然后更新“Galera节点配置”以使用您设置的特定节点的IP地址或可解析域名。 最后,更新其名称,您可以将其设置为任何帮助您标识日志文件中的节点:
/etc/mysql/conf.d/galera.cnf
. . .
# Galera Node Configuration
wsrep_node_address="this_node_ip"
wsrep_node_name="this_node_name"
. . .
保存并退出每个服务器上的文件。 我们需要注释掉这两个服务器上的绑定地址。
sudo nano /etc/mysql/my.cnf
/etc/mysql/my.cnf
. . .
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
# bind-address = 127.0.0.1
. . .
我们几乎准备好启动集群,但在我们做之前,我们将确保相应的端口已打开。
第5步 – 在每个服务器上打开防火墙
在每个服务器上,让我们检查防火墙的状态:
sudo ufw status
在这种情况下,只允许SSH通过:
OutputStatus: active
您可能有其他规则或没有防火墙规则。 由于在这种情况下只允许ssh流量,我们需要为MySQL和Galera流量添加规则。
Galera可以使用四个端口:
3306对于使用mysqldump方法的MySQL客户端连接和状态快照传输。
4567对于Galera群集复制流量,组播复制在此端口上同时使用UDP传输和TCP。
4568用于增量状态传输。
4444用于所有其他状态快照传输。
在我们的示例中,当我们进行设置时,我们将打开所有四个端口。 一旦我们确认复制正常,我们就要关闭我们实际上没有使用的任何端口,并将流量限制在集群中的服务器。
使用以下命令打开端口:
sudo ufw allow 3306,4567,4568,4444/tcp
sudo ufw allow 4567/udp
注:根据还有什么是你的服务器上运行,你可能想限制访问的时候了。
第6步 – 启动集群
首先,我们需要停止正在运行的MySQL服务,以便我们的集群可以联机。
在所有三个服务器上停止MySQL:
在所有三个服务器上使用以下命令停止mysql,以便我们可以在集群中将它们备份:
sudo systemctl stop mysql
systemctl不显示所有服务管理命令的结果,所以要确保我们成功了,我们将使用下面的命令:
sudo systemctl status mysql
如果最后一行看起来像下面这样,命令成功。
Output. . .
Sep 02 22:17:56 galera-02 systemd[1]: Stopped LSB: start and stop MySQL.
一旦我们关闭了mysql所有的服务器,我们就可以继续进行。
启动第一个节点:
我们已经配置了集群的方式,即上线尝试连接到其指定的至少一个其他节点的每个节点galera.cnf文件,以获取其初始状态。 一个正常的systemctl start mysql将失败,因为那里是与连接第一个节点上运行任何节点,所以我们需要将传递wsrep-new-cluster参数,我们开始第一个节点。 然而,无论是systemd也service将正确地接受--wsrep-new-cluster在这个时候的说法 ,所以我们需要使用启动脚本启动的第一个节点/etc/init.d 。 一旦你做到了这一点,你就可以开始与其他节点systemctl.
注意:如果你喜欢他们都与启动systemd ,一旦你有另一个节点,你可以杀死初始节点。由于第二个节点是可用的,当您重新启动第一个与sudo systemctl start mysql它将能够加入到正在运行的集群
sudo /etc/init.d/mysql start --wsrep-new-cluster
当这个脚本命令时,节点被注册为集群的一部分,我们可以使用以下命令查看它:
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)