【MySQL安装】 generic binaries 答疑

【mysql 5.5】generic binaries 方式安装mysql的全部命令

shell> groupadd mysql
shell> useradd -r -g mysql -s /bin/false mysql
shell> cd /usr/local
shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz
shell> ln -s full-path-to-mysql-VERSION-OS mysql
shell> cd mysql
shell> chown -R mysql .
shell> chgrp -R mysql .
shell> scripts/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql data
# Next command is optional
shell> cp support-files/my-medium.cnf /etc/my.cnf
shell> bin/mysqld_safe --user=mysql &
# Next command is optional
shell> cp support-files/mysql.server /etc/init.d/mysql.server

 

问题列表

0.如何知道下载的软件是否破损?比如只下载了3分之一?

1.为什么要创建mysql的用户和组,直接用root不行吗?

2.useradd为什么使用-r,创建mysql之后为什么不能用mysql登录?

3.使用mysql_install_db和 zxvf /path/to/mysql-VERSION-OS.tar.gz 哪个命令才是真正安装数据库?

 4.为什么group至始至终都是mysql组,但初始化前 owner 是mysql用户,初始化后 owner是root用户呢?

5.为什么data数据目录,owner必须是mysql,不可以是root吗?

6.在这一步之前 cp support-files/my-medium.cnf /etc/my.cnf ,Mysql根据什么配置文件启动的呢?

7.bin/mysqld_safe --user=mysql & 中的&是什么意思?

 

 

0.如何知道下载的软件是否破损?比如只下载了3分之一?

软件在mysql公司出厂时会有一个标记(md5字符串),在Download图片旁边,如果不是通过官网渠道下载(比如一些软件网站或者云盘),软件有可能被人动手脚,这时就需要检查他的md5字符串了, 详情看 Verifying Package Integrity Using MD5 Checksums or GnuPG

md5sum ./mysql-5.5.47-linux2.6-x86_64.tar.gz
-----------------------------------------------------------------------
2340f4e663f333ed18bce5eb5f905116 ./mysql-5.5.47-linux2.6-x86_64.tar.gz

 

1.为什么要创建mysql的用户和组,直接用root不行吗?

 官网给出的理由是 

If your system does not already have a user and group to use for running mysqld, you may need to create one.

 “初始化数据库” 和 “启动mysqld服务” 这两个地方要用到 mysqld 

shell> scripts/mysql_install_db --user=mysql
shell> bin/mysqld_safe --user=mysql &
./scripts/mysql_install_db --user --help

 --user=user_name    
The login username to use for running mysqld.  Files and directories created by mysqld will be owned by this user.  You must be root to use this option.  By default mysqld runs using your current login name and files and directories that it creates will be owned by you.

 

2.useradd为什么使用-r,创建mysql之后为什么不能用mysql登录?

linux里面有两种用户

第一种是 system account ,UID小于500,没有home目录,也不能登录

第二种是 normal account ,UID大于500,拥有home目录,可以登录

[root@localhost ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
lijunda:x:1000:1000:lijunda:/home/lijunda:/bin/bash
systemd-bus-proxy:x:998:996:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:997:995:systemd Network Management:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
vboxadd:x:996:1::/var/run/vboxadd:/bin/false
DBA:x:1002:1002::/home/DBA:/bin/bash
mysql:x:995:1003::/home/mysql:/bin/false

大部分都是UID<500的system account , 后面写着 nologin,有home的normal account 寥寥无几

[root@localhost home]# ls -l /home
total 0
drwx------. 2 DBA     DBA     59 Dec 20 16:39 DBA
drwx------. 2 lijunda lijunda 79 Dec 18 00:59 lijunda

让mysql成为system account, MySQL官网理由:“Because the user is required only for ownership purposes, not login purposes, the useradd command uses the -r and -s /bin/false options to create a user that does not have login permissions to your server host.” 在linux中的每个账户都是为了拥有linux的资源,有资源才能做事,mysql就像一个诸侯一样要拥有linux的一部分土地资源,每次想用mysql登录,/bin/false 和/sbin/nologin效果是一样的,不同的是后者会有温馨提醒,而前者直接把你弹回去

[root@localhost home]# su - sshd
This account is system account or mail account.
please DO NOT use this account to login my Linux server.

 

3.使用mysql_install_db和 zxvf /path/to/mysql-VERSION-OS.tar.gz 哪个命令才是真正安装数据库?data目录是固定位置吗?

 我们常说的MySQL数据库管理系统,ORACLE数据库管理系统,其实包含了2个概念,“数据库”和“管理系统”,前者像一个玩具,后者像一个制造玩具的模型,tar 命令像安装一个“管理系统”,而mysql_install_db 是初始化一个数据库,就好比使用一个模型来制造出一个玩具一样,如果“管理系统”比作上帝,那么初始化数据库就好比上帝制造一个人,当然可以初始化很多个“数据库”,而且“数据库”与“数据库”之间可以相互独立,就像人与人之间都是独立的个体一样,这叫做“多实例”

#一开始“管理系统”是没有“data数据库”的

[root@localhost mysql]# ls -l
total 200
drwxr-xr-x.  2 root root    4096 Dec 22 23:12 bin
-rw-r--r--.  1 7161 wheel  17987 Nov  9 22:58 COPYING
drwxr-xr-x.  2 root root      52 Dec 22 23:12 docs
drwxr-xr-x.  3 root root    4096 Dec 22 23:12 include
-rw-r--r--.  1 7161 wheel 151464 Nov  9 23:10 INSTALL-BINARY
drwxr-xr-x.  3 root root    4096 Dec 22 23:12 lib
drwxr-xr-x.  4 root root      28 Dec 22 23:12 man
drwxr-xr-x. 10 root root    4096 Dec 22 23:13 mysql-test
-rw-r--r--.  1 7161 wheel   2496 Nov  9 22:58 README
drwxr-xr-x.  2 root root      29 Dec 22 23:12 scripts
drwxr-xr-x. 27 root root    4096 Dec 22 23:12 share
drwxr-xr-x.  4 root root    4096 Dec 22 23:12 sql-bench
drwxr-xr-x.  2 root root    4096 Dec 22 23:12 support-files

初始化数据库后就有“data目录”了

[root@localhost mysql]# ls -l
total 200
drwxr-xr-x.  2 root  root    4096 Dec 22 23:12 bin
-rw-r--r--.  1  7161 wheel  17987 Nov  9 22:58 COPYING
drwx------.  5 mysql root      54 Dec 23 12:39 data
drwxr-xr-x.  2 root  root      52 Dec 22 23:12 docs
drwxr-xr-x.  3 root  root    4096 Dec 22 23:12 include
-rw-r--r--.  1  7161 wheel 151464 Nov  9 23:10 INSTALL-BINARY
drwxr-xr-x.  3 root  root    4096 Dec 22 23:12 lib
drwxr-xr-x.  4 root  root      28 Dec 22 23:12 man
drwxr-xr-x. 10 root  root    4096 Dec 22 23:13 mysql-test
-rw-r--r--.  1  7161 wheel   2496 Nov  9 22:58 README
drwxr-xr-x.  2 root  root      29 Dec 22 23:12 scripts
drwxr-xr-x. 27 root  root    4096 Dec 22 23:12 share
drwxr-xr-x.  4 root  root    4096 Dec 22 23:12 sql-bench
drwxr-xr-x.  2 root  root    4096 Dec 22 23:12 support-files

data数据目录里面有这些东西

[root@localhost data]# ls -l
total 8
drwx------. 2 mysql root  4096 Dec 23 12:39 mysql
drwx------. 2 mysql mysql 4096 Dec 23 12:39 performance_schema
drwx------. 2 mysql root     6 Dec 23 12:39 test

初始化的主要目的是create 各种各样的table,时区,权限,用户,慢查询等,注意每一份frm/MYD/MYI是一个表格

[root@localhost mysql]# ls -l
total 1048
-rw-rw----. 1 mysql mysql   8820 Dec 23 12:39 columns_priv.frm
-rw-rw----. 1 mysql mysql      0 Dec 23 12:39 columns_priv.MYD
-rw-rw----. 1 mysql mysql   4096 Dec 23 12:39 columns_priv.MYI
-rw-rw----. 1 mysql mysql   9582 Dec 23 12:39 db.frm
-rw-rw----. 1 mysql mysql    880 Dec 23 12:39 db.MYD
-rw-rw----. 1 mysql mysql   5120 Dec 23 12:39 db.MYI
-rw-rw----. 1 mysql mysql  10223 Dec 23 12:39 event.frm
-rw-rw----. 1 mysql mysql      0 Dec 23 12:39 event.MYD
-rw-rw----. 1 mysql mysql   2048 Dec 23 12:39 event.MYI
-rw-rw----. 1 mysql mysql   8665 Dec 23 12:39 func.frm
-rw-rw----. 1 mysql mysql      0 Dec 23 12:39 func.MYD
-rw-rw----. 1 mysql mysql   1024 Dec 23 12:39 func.MYI
-rw-rw----. 1 mysql mysql     35 Dec 23 12:39 general_log.CSM
-rw-rw----. 1 mysql mysql      0 Dec 23 12:39 general_log.CSV
-rw-rw----. 1 mysql mysql   8776 Dec 23 12:39 general_log.frm
-rw-rw----. 1 mysql mysql   8700 Dec 23 12:39 help_category.frm
-rw-rw----. 1 mysql mysql   1120 Dec 23 12:39 help_category.MYD
-rw-rw----. 1 mysql mysql   3072 Dec 23 12:39 help_category.MYI
-rw-rw----. 1 mysql mysql   8612 Dec 23 12:39 help_keyword.frm
-rw-rw----. 1 mysql mysql 104410 Dec 23 12:39 help_keyword.MYD
-rw-rw----. 1 mysql mysql  18432 Dec 23 12:39 help_keyword.MYI
-rw-rw----. 1 mysql mysql   8630 Dec 23 12:39 help_relation.frm
-rw-rw----. 1 mysql mysql   9990 Dec 23 12:39 help_relation.MYD
-rw-rw----. 1 mysql mysql  20480 Dec 23 12:39 help_relation.MYI
-rw-rw----. 1 mysql mysql   8770 Dec 23 12:39 help_topic.frm
-rw-rw----. 1 mysql mysql 482440 Dec 23 12:39 help_topic.MYD
-rw-rw----. 1 mysql mysql  21504 Dec 23 12:39 help_topic.MYI
-rw-rw----. 1 mysql mysql   9510 Dec 23 12:39 host.frm
-rw-rw----. 1 mysql mysql      0 Dec 23 12:39 host.MYD
-rw-rw----. 1 mysql mysql   2048 Dec 23 12:39 host.MYI
-rw-rw----. 1 mysql mysql   8778 Dec 23 12:39 ndb_binlog_index.frm
-rw-rw----. 1 mysql mysql      0 Dec 23 12:39 ndb_binlog_index.MYD
-rw-rw----. 1 mysql mysql   1024 Dec 23 12:39 ndb_binlog_index.MYI
-rw-rw----. 1 mysql mysql   8586 Dec 23 12:39 plugin.frm
-rw-rw----. 1 mysql mysql      0 Dec 23 12:39 plugin.MYD
-rw-rw----. 1 mysql mysql   1024 Dec 23 12:39 plugin.MYI
-rw-rw----. 1 mysql mysql   9996 Dec 23 12:39 proc.frm
-rw-rw----. 1 mysql mysql      0 Dec 23 12:39 proc.MYD
-rw-rw----. 1 mysql mysql   2048 Dec 23 12:39 proc.MYI
-rw-rw----. 1 mysql mysql   8875 Dec 23 12:39 procs_priv.frm
-rw-rw----. 1 mysql mysql      0 Dec 23 12:39 procs_priv.MYD
-rw-rw----. 1 mysql mysql   4096 Dec 23 12:39 procs_priv.MYI
-rw-rw----. 1 mysql mysql   8800 Dec 23 12:39 proxies_priv.frm
-rw-rw----. 1 mysql mysql   1386 Dec 23 12:39 proxies_priv.MYD
-rw-rw----. 1 mysql mysql   5120 Dec 23 12:39 proxies_priv.MYI
-rw-rw----. 1 mysql mysql   8838 Dec 23 12:39 servers.frm
-rw-rw----. 1 mysql mysql      0 Dec 23 12:39 servers.MYD
-rw-rw----. 1 mysql mysql   1024 Dec 23 12:39 servers.MYI
-rw-rw----. 1 mysql mysql     35 Dec 23 12:39 slow_log.CSM
-rw-rw----. 1 mysql mysql      0 Dec 23 12:39 slow_log.CSV
-rw-rw----. 1 mysql mysql   8976 Dec 23 12:39 slow_log.frm
-rw-rw----. 1 mysql mysql   8955 Dec 23 12:39 tables_priv.frm
-rw-rw----. 1 mysql mysql      0 Dec 23 12:39 tables_priv.MYD
-rw-rw----. 1 mysql mysql   4096 Dec 23 12:39 tables_priv.MYI
-rw-rw----. 1 mysql mysql   8636 Dec 23 12:39 time_zone.frm
-rw-rw----. 1 mysql mysql   8624 Dec 23 12:39 time_zone_leap_second.frm
-rw-rw----. 1 mysql mysql      0 Dec 23 12:39 time_zone_leap_second.MYD
-rw-rw----. 1 mysql mysql   1024 Dec 23 12:39 time_zone_leap_second.MYI
-rw-rw----. 1 mysql mysql      0 Dec 23 12:39 time_zone.MYD
-rw-rw----. 1 mysql mysql   1024 Dec 23 12:39 time_zone.MYI
-rw-rw----. 1 mysql mysql   8606 Dec 23 12:39 time_zone_name.frm
-rw-rw----. 1 mysql mysql      0 Dec 23 12:39 time_zone_name.MYD
-rw-rw----. 1 mysql mysql   1024 Dec 23 12:39 time_zone_name.MYI
-rw-rw----. 1 mysql mysql   8686 Dec 23 12:39 time_zone_transition.frm
-rw-rw----. 1 mysql mysql      0 Dec 23 12:39 time_zone_transition.MYD
-rw-rw----. 1 mysql mysql   1024 Dec 23 12:39 time_zone_transition.MYI
-rw-rw----. 1 mysql mysql   8748 Dec 23 12:39 time_zone_transition_type.frm
-rw-rw----. 1 mysql mysql      0 Dec 23 12:39 time_zone_transition_type.MYD
-rw-rw----. 1 mysql mysql   1024 Dec 23 12:39 time_zone_transition_type.MYI
-rw-rw----. 1 mysql mysql  10630 Dec 23 12:39 user.frm
-rw-rw----. 1 mysql mysql    344 Dec 23 12:39 user.MYD
-rw-rw----. 1 mysql mysql   2048 Dec 23 12:39 user.MYI

也就是说,mysql_install_db的目的,是为了初始化一个叫“infromation_schema 的数据库(模式)”,它记录了底层的信息

当然我们可能希望“管理系统”和“数据库”分离,不要放在一起,数据独立的放到另外一个位置(The path to the MySQL data directory”) 使用--datadir=path来实现

鸟哥linux——如果/usr是安装时会占用较大的硬盘容量目录,那么/var就是在系统运行后才会渐渐占用硬盘容量的目录。因为/var 目录主要针对常态性变动的文件,包括缓存cache,登录文件log file,以及某些软件运行时产生的文件,包括程序文件lock file,run file .而/var/lib 主要存放每个软件的数据文件,MySQL数据库可以在它的目录下新建一个自己的文件夹,如/var/lib/mysql

[root@localhost mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/var/lib/mysql
Installing MySQL system tables...
151223 12:56:49 [Note] ./bin/mysqld (mysqld 5.5.47) starting as process 3658 ...
OK
Filling help tables...
151223 12:56:49 [Note] ./bin/mysqld (mysqld 5.5.47) starting as process 3665 ...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

./bin/mysqladmin -u root password 'new-password'
./bin/mysqladmin -u root -h localhost.localdomain password 'new-password'

Alternatively you can run:
./bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:
cd . ; ./bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd ./mysql-test ; perl mysql-test-run.pl

Please report any problems at http://bugs.mysql.com/

删除数据库时,就直接把“数据目录” rm -rf 掉即可

 

 4.为什么group至始至终都是mysql组,但初始化前 owner 是mysql用户,初始化后 owner是root用户呢?

shell> chown -R mysql .
shell> chgrp -R mysql .
shell> scripts/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql data

首先把所有东西都变成mysql

[root@localhost mysql]# chown -R mysql:mysql . 

[root@localhost mysql]# ls -l
total 200
drwxr-xr-x.  2 mysql mysql   4096 Dec 23 13:24 bin
-rw-r--r--.  1 mysql mysql  17987 Nov  9 22:58 COPYING
drwxr-xr-x.  3 mysql mysql     17 Dec 23 13:24 data
drwxr-xr-x.  2 mysql mysql     52 Dec 23 13:24 docs
drwxr-xr-x.  3 mysql mysql   4096 Dec 23 13:24 include
-rw-r--r--.  1 mysql mysql 151464 Nov  9 23:10 INSTALL-BINARY
drwxr-xr-x.  3 mysql mysql   4096 Dec 23 13:24 lib
drwxr-xr-x.  4 mysql mysql     28 Dec 23 13:24 man
drwxr-xr-x. 10 mysql mysql   4096 Dec 23 13:24 mysql-test
-rw-r--r--.  1 mysql mysql   2496 Nov  9 22:58 README
drwxr-xr-x.  2 mysql mysql     29 Dec 23 13:24 scripts
drwxr-xr-x. 27 mysql mysql   4096 Dec 23 13:24 share
drwxr-xr-x.  4 mysql mysql   4096 Dec 23 13:24 sql-bench
drwxr-xr-x.  2 mysql mysql   4096 Dec 23 13:24 support-files

初始化“数据目录”后,再把所有东西属于root用户,为什么不能属于mysql用户呢?

[root@localhost mysql]# chown -R root:mysql .
[root@localhost mysql]# chown -R mysql ./data
[root@localhost mysql]# ls -l
total 200
drwxr-xr-x.  2 root  mysql   4096 Dec 23 13:24 bin
-rw-r--r--.  1 root  mysql  17987 Nov  9 22:58 COPYING
drwxr-xr-x.  5 mysql mysql     54 Dec 23 13:29 data
drwxr-xr-x.  2 root  mysql     52 Dec 23 13:24 docs
drwxr-xr-x.  3 root  mysql   4096 Dec 23 13:24 include
-rw-r--r--.  1 root  mysql 151464 Nov  9 23:10 INSTALL-BINARY
drwxr-xr-x.  3 root  mysql   4096 Dec 23 13:24 lib
drwxr-xr-x.  4 root  mysql     28 Dec 23 13:24 man
drwxr-xr-x. 10 root  mysql   4096 Dec 23 13:24 mysql-test
-rw-r--r--.  1 root  mysql   2496 Nov  9 22:58 README
drwxr-xr-x.  2 root  mysql     29 Dec 23 13:24 scripts
drwxr-xr-x. 27 root  mysql   4096 Dec 23 13:24 share
drwxr-xr-x.  4 root  mysql   4096 Dec 23 13:24 sql-bench
drwxr-xr-x.  2 root  mysql   4096 Dec 23 13:24 support-files

 

 5.为什么data数据目录,owner必须是mysql,不可以是root吗?

Otherwise, most of the MySQL installation can be owned by root if you like. The exception is that the data directory must be owned by mysql.

mysql官网文档,只告诉你how to do,但没告诉你why,这很像义务教育,告诉你必须要学习,却没有告诉你为什么要学习

 When MySQL is running, it runs as the mysql user account. If the data directory was owned by root, MySQL would not have permission to write to it!

我自己的一个提问:why MySLQ datadir must be owned by mysql user?

 

6.在这一步之前 cp support-files/my-medium.cnf /etc/my.cnf ,Mysql根据什么配置文件启动的呢?

 

7.bin/mysqld_safe --user=mysql & 中的&是什么意思?

mysqld_safe意思是安全地启动mysqld服务,有的机器性能好,3秒就能启动mysqld服务,但有些机器性能差,可能30个小时才能成功启动mysqld服务,如果ssh终端断开连接,mysqld启动进程就会被终止,好比 ctrl+V 终止进程一样,&的作用是为了让进程在linux后台进程,或许你的secureCRT断开了,但进程还在执行,直到执行完毕或者被你kill掉,详细参考:why run a Linux shell command with &?

Thanks Martin, suppose I use ssh terminal log into a machine, then using the ssh's terminal to execute the command (suppose a long-run process), then if I quit the terminal session, then the command's long-run process will be terminated correct? And if I execute the command using & in ssh terminal, even if I quit the terminal, the command's long-run process is still running, correct?

 

安装完以后,可以参考下一篇博文:[MySQL安装] 安装后测试MySQL是否能正常使用

 

总结

1.网上很多资料会告诉你怎样做 how to do ,但很少会告诉你 why to do ? 如果不知道“为什么去做”,那就不能把知识点用“逻辑线”穿起来,其实每一步操作都隐藏着“需求”,自己需要了解清楚这个小需求和理由,这涉及原理性的东西

2.为什么要写技术博客?小朱说是为了以后想要配置ssh可以速度的查询,现在写技术博客有两个刚需,1.就像知乎一样,当一个答案写出来,会发现自己哪个地方不懂,如果不写出来,会以为自己全部地方都懂,这是费曼技巧的应用,2.产品经理和HR在寻求优秀的人才,怎么证明你的优秀?知乎有个人在上面贴了一个mysql优化链接,下面马上有人招聘了,技术博客和github上的代码,stackoverflow的账号一样,会为你以后高新招聘提供准备的

 

------------------------------------------------------------------------------------------------------

【mysql 5.7】

与5.5相比,安装唯一不同的地方是,初始化data directory,不能用之前的 /bin/mysql_install_db语句了

初始化后,会提供一个暂时的密码,登陆后就自己修改密码可以了

 

posted @ 2015-12-22 23:23  lawrence.li  阅读(369)  评论(0编辑  收藏  举报