Linux 安装 MySQL
1)创建 MySQL 用户组和用户
[root@localhost]# cat /etc/group | grep mysql
[root@localhost]# cat /etc/passwd |grep mysql
[root@localhost]# groupadd mysql
[root@localhost]# useradd -r -g mysql mysql
2)从官网下载用于 Linux 的 MySQL 的安装包
下载地址:https://downloads.mysql.com/archives/community/
解压到 /usr/local/mysql 目录下:
[root@localhost]# tar xzvf mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz
[root@localhost]# mv mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz /usr/local/mysql
3)安装 MySQL
在 /usr/local/mysql 目录下创建 data 目录,用来存储数据:
[root@localhost]# mkdir /usr/local/mysql/data
更改 mysql 目录下所有的目录及文件夹所属的用户组和用户以及权限:
[root@localhost]# chown -R mysql:mysql /usr/local/mysql
[root@localhost]# chmod -R 755 /usr/local/mysql
编译安装并初始化 MySQL,务必记住初始化输出日志末尾的密码(数据库管理员临时密码)
[root@localhost]# cd /usr/local/mysql/bin
[root@localhost]# ./mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql
示例输出如下:
记录日志最末尾位置 root@localhost: 后的字符串,此字符串即为 MySQL 管理员临时登录密码。
编辑配置文件 my.cnf,添加配置如下:
[root@localhost]# vim /etc/my.cnf
[root@localhost]# cat /etc/my.cnf
[mysqld]
datadir=/usr/local/mysql/data
port=3306
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
symbolic-links=0
max_connections=600
innodb_file_per_table=1
lower_case_table_names=1
character_set_server=utf8
测试启动 MySQL 服务器:
[root@localhost]# cd /usr/local/mysql/support-files
[root@localhost]# ./mysql.server start
显示如下结果,则说明数据库已安装并可以正常启动:
4)登录 MySQL 并修改临时密码
登录 MySQL:
[root@localhost]# cd /usr/local/mysql/bin
[root@localhost]# ./mysql -u root -p
成功登录后的界面如下:
修改临时密码:
mysql> set password for root@localhost = password('yourpass');
开放远程连接:
mysql> use mysql;
mysql> update user set user.Host='%' where user.User='root';
mysql> flush privileges;
最后,我们也可以把 usr/local/mysql/bin 目录添加到系统的 PATH 变量里方便使用,命令如下:
vim ~/.bash_profile
export PATH=/usr/local/mysql/bin:$PATH
source ~/.bash_profile
配置文件
1. 组名
Linux 下 MySQL 的配置文件的默认路径在 /etc/my.cnf 这个地方,并且配置文件中的启动选项被划分为了若干个组,每个组有一个组名,用中括号 [] 扩起来,像这样:
[server]
......
[mysqld]
......
[client]
......
配置文件中不同的选项组是给不同的启动命令使用的,如果选项组名称与程序名称相同,则组中的选项将专门应 用于该程序。例如,[mysqld] 和 [mysql] 组分别应用于 mysqld 服务器程序和 mysql 客户端程序。不过有两个选项组比较特别:
- [server] 组下边的启动选项将作用于所有的服务器程序。
- [client] 组下边的启动选项将作用于所有的客户端程序。
为了直观感受一下,我们挑一些启动命令来看一下它们能读取的选项组都有哪些:
启动命令 | 类别 | 能读取的组 |
---|---|---|
mysqld | 启动服务器 | [mysqld]、[server] |
mysqld_safe | 启动服务器 | [mysqld]、[server]、[mysqld_safe] |
mysql | 启动客户端 | [mysql]、[client] |
mysqladmin | 启动客户端 | [mysqladmin]、[client] |
mysqldump | 启动客户端 | [mysqldump]、[client] |
我们还可以在选项组的名称后加上特定的 MySQL 版本号,比如对于 [mysqld] 选项组来说,我们可以定义一个 [mysqld-5.7] 的选项组,它的含义和 [mysqld] 一样,只不过只有版本号为 5.7 的 mysqld 程序才能使用这个选
项组中的选项。
2. 常用参数
以 [mysqld] 组为例,可配置的重要配置文件参数说明如下:
# mysql数据文件所在位置
datadir = /usr/local/mysql/data
# 事务隔离级别,默认为可重复读
transaction_isolation = READ-COMMITTED
# 数据库字符集
character-set-server = utf8mb4
# 数据库字符集对应一些排序等规则,注意要和character-set-server对应
collation-server = utf8mb4_general_ci
# 设置client连接mysql时的字符集,防止乱码
init_connect='SET NAMES utf8mb4'
# 是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names = 1
# 最大连接数
max_connections = 400
# 最大错误连接数
max_connect_errors = 1000
# MySQL连接闲置超时时间(单位:秒),MySQL默认的wait_timeout值为8个小时, interactive_timeout参数需要同时配置才能生效
interactive_timeout = 1800
wait_timeout = 1800
# 内存临时表的最大值,当执行group by、order by时可能用到临时表,超过该值会使用磁盘临时表,系统IO压力增大
tmp_table_size = 134217728
max_heap_table_size = 134217728
################################用户进程分配到的内存设置################################
# order by或group by时用到
sort_buffer_size = 2097152
# 一般数据库中没什么大的事务,设成1~2M,默认32kb
binlog_cache_size = 524288
####################################日志设置####################################
# 数据库错误日志文件
log_error = error.log
# 慢查询sql日志设置
slow_query_log = 1
slow_query_log_file = slow.log
# 慢查询执行的秒数,必须达到此值可被记录
long_query_time = 8
# 检索的行数必须达到此值才可被记为慢查询
min_examined_row_limit = 100
# mysql binlog日志文件保存的过期时间,过期后自动删除
expire_logs_days = 5
####################################主从复制设置####################################
# 开启mysql binlog功能
log-bin=mysql-bin
# binlog记录内容的方式,记录被操作的每一行
binlog_format = ROW
#对于binlog_format=ROW模式时,减少记录日志的内容,只记录受影响的列
binlog_row_image = minimal
#############################redolog和binlog的关系设置#############################
# commit事务时,控制redolog buff持久化磁盘的模式,默认为1
# 当设置为2时,在每个事务提交时,日志缓冲被写到文件,但不对日志文件做刷新到磁盘的操作,后台fsync每秒一次。因此,异常宕机只会丢失最后一秒的事务。
innodb_flush_log_at_trx_commit = 2
# commit事务时,控制写入binlog日志的模式,默认为0,即不主动与硬盘同步
# 如果是autocommit模式,那么每执行一个语句就会向binlog日志写入一次,否则每个事务写入一次。如果sync_binlog的值为正,那么每当sync_binlog参数设定的语句或事务数被写入二进制日志后,MySQL服务器就会将它的二进制日志同步到硬盘上。值为1最安全,因为崩溃时最多丢掉一个语句或事务,但这也是最慢的
sync_binlog = 1
####################################Innodb设置###################################
# 数据块大小,默认是16k
innodb_page_size = 8192
# InnoDB用来缓存数据和索引的内存缓冲区,一般设置物理存储的60%~70%
innodb_buffer_pool_size = 1G
# CPU多核处理能力设置,假设CPU是2颗4核的,设置如下。读多,写少可以设成2:6的比例
innodb_write_io_threads = 4
innodb_read_io_threads = 4
#提高刷新脏页数量和合并插入数量,改善磁盘I/O处理能力,默认值200(单位:页)
innodb_io_capacity = 500
# 调整buffer pool中最近使用的页读取并dump的百分比,通过设置该参数可以减少转储的page数
innodb_buffer_pool_dump_pct = 40
# 设置redolog文件所在目录
innodb_log_group_home_dir = /opt/mysql/redolog/
# 设置undolog文件所在目录, undolog用于事务回滚操作
innodb_undo_directory = /opt/mysql/undolog/
# 在innodb_log_group_home_dir中的redolog文件数, redolog文件内容是循环覆盖写入。
innodb_log_files_in_group = 3
# 日志组里每个日志文件的大小,值越大在缓冲池中需要检查点刷新的行为就越少,因此越节约磁盘I/O,但更大的日志文件也意味着在崩溃时恢复得更慢
innodb_log_file_size = 1024M
# 设置undolog文件所占空间
innodb_undo_log_truncate = 1
innodb_undo_tablespaces = 3
innodb_undo_logs = 128
# 通过设置配置参数innodb_thread_concurrency来限制并发线程的数量,一旦执行线程数量达到限制,额外的线程在被放置到队列之前,会睡眠数微秒,
# 可以通过设定参数innodb_thread_sleep_delay来配置睡眠时间
innodb_thread_concurrency = 0
# 强所有发生的死锁错误信息记录到error.log中,之前通过命令行只能查看最近一次死锁信息
innodb_print_all_deadlocks = 1
常用脚本
mysqld
mysqld 这个可执行文件就代表着 MySQL 服务器程序,运行这个可执行文件就可以直接启动一个服务器进程。但一般我们不直接使用这个命令。
mysqld_safe
mysqld_safe 是一个启动脚本,它会间接的调用 mysqld ,而且还顺便启动了另外一个监控进程,这个监控进程在服务器进程挂了的时候,可以帮助重启它。另外,使用 mysqld_safe 启动服务器程序时,它会将服务器程序的 出错信息和其他诊断信息重定向到某个文件中,产生出错日志,这样可以方便我们找出发生错误的原因。
mysql.server
这个脚本在 support-files 目录下。它也是一个启动脚本,它会间接的调用 mysqld_safe 脚本,指定 start 参数可以启动服务器程序,指定 stop 参数就可以关闭服务器程序。
客户端连接
bin 目录下有许多客户端程序,比方 mysqladmin、mysqldump、mysqlcheck 等,我们重点关注 mysql 这个可执行文件,通过这个可执行文件可以让我们和服务器程序进程交互,启动命令的格式如下:
./mysql -h 主机名 -u 用户名 -p
如果你的服务器和客户端安装在同一台机器上,-h 参数可以省略。
常用命令
1. 创建用户
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
- username:你将创建的用户名
- host:指定该用户在哪个主机上可以登陆,如果是本地用户可以用 localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符 %
- password:该用户的登陆密码,如果为空则该用户可以不需要密码登陆服务器
使用示例如下:
CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456';
CREATE USER 'pig'@'192.168.1.101_' IDENDIFIED BY '123456';
CREATE USER 'pig'@'%' IDENTIFIED BY '123456';
CREATE USER 'pig'@'%' IDENTIFIED BY '';
CREATE USER 'pig'@'%';
删除用户的命令如下:
DROP USER 'username'@'host';
2. 授权
GRANT privileges ON databasename.tablename TO 'username'@'host'
- privileges:用户的操作权限,如 SELECT、INSERT、UPDATE 等,如果要授予所有的权限则使用 ALL
- databasename:数据库名
- tablename:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用 表示,如 .*
使用示例如下:
GRANT SELECT, INSERT ON test.user TO 'pig'@'%';
GRANT ALL ON *.* TO 'pig'@'%';
注意:用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,则使用以下命令:
GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;
撤销用户权限的命令如下:
REVOKE privilege ON databasename.tablename FROM 'username'@'host';
3. 修改密码
SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');
如果修改的是当前登陆用户则可使用如下命令:
SET PASSWORD = PASSWORD("newpassword");
使用示例如下:
SET PASSWORD FOR 'pig'@'%' = PASSWORD("123456");
4. 系统变量
查看系统变量:
SHOW VARIABLES [LIKE 匹配的模式]
SHOW [GLOBAL|SESSION] VARIABLES [LIKE 匹配的模式]
设置系统变量:
SET [GLOBAL|SESSION] 系统变量名=值
- GLOBAL:全局变量,影响服务器的整体操作。
- SESSION:会话变量,影响某个客户端连接的操作。注意,SESSION 还有个别名叫 LOCAL。
注意,并不是所有系统变量都具有 GLOBAL 和 SESSION 的作用范围,甚至有些系统变量是只读的,并不能设置值。具体可查阅官方文档。
5. 状态变量
为了让我们更好的了解服务器程序的运行情况,MySQL 服务器程序中维护了好多关于程序运行状态的变量,它们被称为状态变量。比方说 Threads_connected 表示当前有多少客户端与服务器建立了连接。由于状态变量是用来显示服务器程序运行状况的,所以它们的值只能由服务器程序自己来设置。与系统变量类似,状态变量也有 GLOBAL 和 SESSION(默认)两个作用范围的,具体命令如下:
SHOW [GLOBAL|SESSION] STATUS [LIKE 匹配的模式]