linux怎么启动mysql服务器
Linux启动/停止/重启Mysql数据库的方法
1、查看mysql版本
方法一:status;
方法二:select version();
2、Mysql启动、停止、重启常用命令
a、启动方式
1、使用 service 启动:
[root@localhost /]# service mysqld start (50版本是mysqld)
[root@szxdb etc]# service mysql start (557版本是mysql)
2、使用 mysqld 脚本启动:
/etc/inintd/mysqld start
3、使用 safe_mysqld 启动:
safe_mysqld&
b、停止
1、使用 service 启动:
service mysqld stop
2、使用 mysqld 脚本启动:
/etc/inintd/mysqld stop
3、mysqladmin shutdown
c、重启
1、使用 service 启动:
service mysqld restart
service mysql restart (557版本命令)
2、使用 mysqld 脚本启动:
/etc/initd/mysqld restart
方法如下:
1、mysql中查看服务是否启动的有关命令和参数的意思。
2、在dos窗口运行命令,结果如图。
3、mysql服务停止后。
4、dos命令执行情况。
延展回答:
mysqladmin 是mysql查看服务器的命令 。
-u 是连接数据库的用户名 。
-h 是远程服务器的ip地址 。
-p 是登陆mysql的密码(注意p是小写的) 。
-P 是mysql的端口号(这里的p是大写的)。
ping 本人理解就是ping mysql服务是否开启。
Linux作为类Unix,同样也存在这两种风格,其中Centos属于System V,本文主要介绍在Centos下(即System V风格)如何启动和关闭MySQL,同时简单介绍BSD系统的情况。
MySQL启动方式
1)直接调用mysqld。这是最不常见的方式,不推荐使用。
2)运行mysqlserver脚本
mysqlserver脚本通过调用mysqld_safe启动服务器,该脚本可以通过参数start和stop指定启动还是关闭。
mysqlserver脚本在MySQL安装目录下的share/mysql目录中,如果是采用源码安装的MySQL,则可以在support-files目录里找到。如果想使用mysqlserver,则必须把它复制到合适的运行级别目录中,如下所示:
1
2
[plain]
cp mysqlserver /etc/initd/mysqld
chmod 755 /etc/initd/mysqld
如上配置之后,就可以利用以下命令启动和关闭MySQL实例了:
[sql]
service mysqld start/stop
/etc/initd/mysqld start/stop
使用chkconfig命令配置开机自动启动:
[sql]
chkconfig --add mysqld
chkconfig mysqld on
运行以下命令检查是否正确启用:
[plain]
[root@data data]# chkconfig --list mysqld
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
MySQL关闭方式
一般情况下mysql的启动错误还是很容易排查的,但是今天我们就来说一下不一般的情况。拿到一台服务器,安装完mysql后进行启动,启动错误如下:
有同学会说,哥们儿你是不是buffer pool设置太大了,设置了96G内存。这明显提示无法分配内存嘛。如果真是这样也就不在这里进行分享了,哈哈。
我的服务器内存是128G。如下图:
服务器内存使用情况:
那么问题来了,既然还剩如此多的内存,为什么提示无法分配内存??。各位童鞋怎么看?
1 首先想到会不会是有几条内存坏了?于是运维的同学进行了检查,给我的反馈是硬件一切正常。
2 把mysql配置参数又检查了一遍,没有发现什么问题,线上一直就是使用这些参数。
3 又把文件拷贝到另外一台机器,,另外一台服务器可以正常启动(2台机器硬件配置一致)。
那么如果排除硬件问题,mysql配置问题,那么剩下的就只有操作系统的内核参数配置了。于是把两台服务器进行了对比,最终发现了一个内核参数不一致。
复制代码代码如下:
vmovercommit_memory
mysql启动正常的服务器改参数的值是0,而mysql启动错误的这台服务器该值是2。
那么问题来了,这个参数到底是什么鬼?竟然会让mysql分配内存失败,最后导致无法启动。经过查询资料知道了vmovercommit_memory是什么鬼。
vmovercommit_memory
默认值为:0
从内核文档里得知,该参数有三个值,分别是:
0:当用户空间请求更多的的内存时,内核尝试估算出剩余可用的内存。
1:当设这个参数值为1时,内核允许超量使用内存直到用完为止,主要用于科学计算
2:当设这个参数值为2时,内核会使用一个决不过量使用内存的算法,即系统整个内存地址空间不能超过swap+50%的RAM值,50%参数的设定是在overcommit_ratio中设定。
vmovercommit_ratio
默认值为:50
这个参数值只有在vmovercommit_memory=2的情况下,这个参数才会生效。
那么我们来看一下总的内存地址不能超过多少。其实是可以直接查看的。
[root@yayundeng 3306]# cat /proc/meminfo |grep -i commit
CommitLimit: 70144396 kB
Committed_AS: 135196 kB
[root@yayundeng 3306]#
通过查看可以得知在70G的样子。那么这个是如何计算的呢?这个就是上面提到的一个公式。swap+50%的RAM值,50%参数的设定是在overcommit_ratio中设定。
总虚拟内存 = 可用物理内存 × 百分比 + 交换分区
[root@yayundeng 3306]# cat /proc/meminfo | grep MemTotal
MemTotal: 132096808 kB
[root@yayundeng 3306]#
[root@yayundeng 3306]# free -k
total used free shared buffers cached
Mem: 132096808 1583944 130512864 0 10240 133220
-/+ buffers/cache: 1440484 130656324
Swap: 4095992 0 4095992
[root@yayundeng 3306]# cat /proc/sys/vm/overcommit_ratio
50
[root@yayundeng 3306]#
总虚拟内存=132096808 50% + 4095992= 70144396 kB
那么最后的结果就是buffer pool不能超过70144396 kB - 135196 kB=70009200 KB=66G。实际上经过测试,buffer pool只能设置57G。
最后在看看总虚拟内存情况:
CommitLimit:最大可用虚拟内存
Committed_AS:已使用虚拟内存
[root@yayundeng 3306]# cat /proc/meminfo |grep -i commit
CommitLimit: 70144396 kB
Committed_AS: 65539208 kB
那么如果把内核参数vmovercommit_memory恢复为默认值0,那么将不会受到约束。
复制代码代码如下:
echo 0 > /proc/sys/vm/overcommit_memory
参考资料:
http://serverfaultcom/questions/606185/how-does-vm-overcommit-memory-work
http://linuxperfcom/p=102
总结:
说了这么多,那么为什么要修改内核参数vmovercommit_memory的值呢?这个是因为这台服务器之前跑过GreenPlum数据库,拿到我手上的时候没有进行重装系统,那么还是建议如果拿到的机器之前跑过其他的业务,那么保险的方法还是重装一下系统,然后再部署自己的业务,不然真的会出现莫名其妙的问题。
开启 MySQL 的远程登陆帐号需要注意下面3点: 1、确定服务器上的防火墙没有阻止 3306 端口。 MySQL 默认的端口是 3306 ,需要确定防火墙没有阻止 3306 端口,否则远程是无法通过 3306 端口连接到 MySQL 的。 如果您在安装 MySQL 时指定了其他端口,请在防火
开启 MySQL 的远程登陆帐号需要注意下面3点:
1、确定服务器上的防火墙没有阻止 3306 端口。
MySQL 默认的端口是 3306 ,需要确定防火墙没有阻止 3306 端口,否则远程是无法通过 3306 端口连接到 MySQL 的。
如果您在安装 MySQL 时指定了其他端口,请在防火墙中开启您指定的 MySQL 使用的端口号。
如果不知道怎样设置您的服务器上的防火墙,请向您的服务器管理员咨询。
2确定安全狗等没有拦截我们的备份服务器IP
如果你的服务器上有安装安全狗等安全类软件,请将我们的备份服务器IP 115283660以及其他的备份服务器IP添加到白名单中。
3、增加允许远程连接 MySQL 用户并授权。
1)登陆服务器端,进入命令行。
Windows 主机中是点击开始菜单,运行,输入“cmd”,进入命令行。
2)以数据库管理员帐号进入mysql控制台。在命令行执行 mysql -u root -p 密码,输入完成后即可进入mysql控制台。
例如: MySQL -uroot -p123456
123456 为 root 用户的密码。
3)创建远程登陆用户并授权,在控制台继续执行下面语句。
grant select,lock tables on demodb to demouser@'115283660′ identified by 'your password';
解释:demodb=数据库名;demouser=数据库用户名;your password=数据库密码
例如:
grant select,lock tables on discuz to ted@'115283660′ identified by '123456′;
4)执行了上面的语句后,再执行下面的语句,方可立即生效。
flush privileges;
小编解释:
grant select,lock tables on discuz to ted@'115283660′ identified by '123456′;
上面的语句表示将 discuz 数据库的select,locked权限授权给 ted 这个用户,允许 ted 用户在 115283660 这个 IP 进行远程登陆,并设置 ted 用户的密码为 123456 。
discuz 表示上面的权限是针对于哪个表的,discuz 指的是数据库,后面的 表示对于所有的表,由此可以推理出:对于全部数据库的全部表授权为“”,对于某一数据库的全部表授权为“数据库名”,对于某一数据库的某一表授 权为“数据库名表名”。
ted 表示你要给哪个用户授权,这个用户可以是存在的用户,也可以是不存在的用户。
115283660 表示允许远程连接的 IP 地址,如果想不限制链接的 IP 则设置为“%”即可。
注意:
115283660是我们的一个备份服务器IP,主要用来测试我们的服务器是否能够连接上你的数据库。
这里很多朋友会有疑问,这样会不会不安全啊,其实不用担心,因为首先,你只是授权允许我们的服务器连接你的数据库,其次,我们的服务器也只具有select和lock权限,也就是查询和锁表的权限,所以完全不能更改你的数据库。
不放心的话可以在mysql控制台执行 select host, user from user; 检查一下用户表里的内容因为开启mysql远程登录的用户都是存储在mysql数据库中的user表中。
0条评论