Linux中安装mysql数据库(mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz)
原因
记录在linux中安装mysql数据库(二进制版)遇到的困难,因为百度很多安装的方式都不能一次完整安装,所以为了防止下一次重新花费更多的时间,所以记录一下.
步骤
一. 下载linux版本的mysql数据库
1.百度输入mysql,到mysql官网进行下载
2.官网点击download->community->mysql community server,到达选择版本的页面
3.我使用的是5.6.39版本的数据库,在页面可以选择,如果最新版本,页面往下拉就可以看到最新版本的下载页面
4.点击mysql community server 5.6后跳到下面这个页面,因为我使用的是二进制版本的数据库,所以在第二个框中选择linux-generic,找到对应的位数版本,标题下有显示是什么类型的.我们要下的是以tar.gz后缀版本
5.选好版本后点击download,跳到下载页面
二. 在linux中安装mysql数据库
1. 下载的安装包上传到linux中
2. 在安装mysql数据库之情,需要安装一些环境,如下:
yum -y install autoconf wget
3. 安装完相关软件后, 添加mysql运行是所需要的用户mysql,如下:
useradd -M -s /sbin/nologin mysql
cat /etc/passwd |grep mysql
cat /etc/group |grep mysql
4. 找到上传的mysql安装包,解压到指定文件夹,并修改名字为mysql
tar –zxvf mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz
cp mysql-5.6.39-linux-glibc2.12-x86_64 /usr/local/mysql –r
5. 跳转到解压的文件夹
cd /usr/local/mysql/
6. 如果解压后的文件夹下有data文件夹,则不用创建data文件夹,如果没有,创建一个,赋予mysql文件夹读取权限
mkdir -p /usr/local/mysql/data
chown -R mysql:mysql /usr/local/mysql/
7. 创建mysql5.6的启动脚本,如下
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
8. 修改启动项中的配置文件
vim /etc/init.d/mysqld
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
9. 修改启动项的权限
chmod +x /etc/init.d/mysqld
10. 初始化mysql5.6,使用如下命令
cd /usr/local/mysql/scripts/
./mysql_install_db –user=mysql –basedir=/usr/local/mysql –datadir=/usr/local/mysql/data
出现错误:
解决方式(使用下列代码代替上面这段,可以解决问题):
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data &
注意:
bash: scripts/mysql_install_db: /usr/bin/perl: 坏的解释器: 没有那个文件或目录
执行 yum -y install perl perl-devel
安装mysql5.6版本时,初始化数据库出现以下报错:
FATAL ERROR: please install the following Perl modules before executing /usr/local/mysql/scripts/mysql_install_db:
Data::Dumper
解决方法:
安装autoconf库
命令:yum install autoconf -y
初始化数据库出现 :Installing MySQL system tables.../usr/local/mysql/bin/mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory
原因:缺少libaio库文件
解决方法:yum install libaio* -y
如果还不行
安装 numactl :yum -y install numactl
再执行初始化命令,成功
10.初始化mysql5.7,使用如下命令
cd /usr/local/mysql/bin/
./mysqld --initialize --user=mysql
11. 创建mysql5.6的my.cnf文件,如下:
cd /usr/local/mysql/support-files
cp my-default.cnf /etc/my.cnf
注意:如果出现是否覆盖,选择覆盖,因为在安装linux的时候安装了mysql,会自动创建一个my.cnf文件
12. 把mysql5.6添加到环境变量
vim /etc/profile
export PATH=$PATH:/usr/local/mysql/bin
(要插入的位置是在profile最下面)
source /etc/profile
env
13 . 启动mysql5.6,使用如下命令:
1. 启动的方式有两种:
/etc/init.d/mysqld start
或者
service mysqld start
2. 检测3306端口是否被开启
netstat -tunlp |grep 3306
如果出现了上面的代码,说明已经安装成功了
14. 设置mysql的root用户登录密码,如下
/usr/local/mysql/bin/mysqladmin -u root password ‘密码’
mysql -h127.0.0.1 -uroot –p密码
出现错误:
解决方式:
出现错误的原因是因为/var/lib/mysql/下没有mysql.sock,解决的方式是创建一个,但是这个文件有点特殊,不能进行复制,所以最后通过在/etc/my.cnf中添加一段代码:
# 一般配置选项
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
socket =/var/lib/mysql/mysql.sock
character-set-server=utf8
back_log = 300
max_connections = 3000
max_connect_errors = 50
table_open_cache = 4096
max_allowed_packet = 32M
#binlog_cache_size = 4M
max_heap_table_size = 128M
read_rnd_buffer_size = 16M
sort_buffer_size = 16M
join_buffer_size = 16M
thread_cache_size = 16
query_cache_size = 128M
query_cache_limit = 4M
ft_min_word_len = 8
thread_stack = 512K
transaction_isolation = REPEATABLE-READ
tmp_table_size = 128M
#log-bin=mysql-bin
long_query_time = 6
server_id=1
innodb_buffer_pool_size = 1G
innodb_thread_concurrency = 16
innodb_log_buffer_size = 16M
innodb_log_file_size = 512M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
innodb_file_per_table = on
[mysqldump]
quick
max_allowed_packet = 32M
[mysql]
no-auto-rehash
default-character-set=utf8
safe-updates
[myisamchk]
key_buffer = 16M
sort_buffer_size = 16M
read_buffer = 8M
write_buffer = 8M
[mysqlhotcopy]
interactive-timeout
[mysqld_safe]
open-files-limit = 8192
其实关键就一个地方:
socket=/var/lib/mysql/mysql.sock
设置完成后,保存,然后重启mysql服务,会自动在var/lib/mysql下自动创建mysql.sock文件
解决这个困难后,有出现了另一困难:
说明之前的密码还是没有设置成功,所以需要重新设置密码.解决办法,采用的办法是采用跳过密码验证的方式,登录mysql,然后重置密码.
重置密码
1.在/etc/my.cnf中的[mysqld]后面添加” skip-grant-tables”用来跳过密码验证的过程,如下图所示:
vim /etc/my.cnf
2.按 i 进入插入操作,添加这一行代码
3.添加完成后,按esc,输入:wq,保存退出
4.重启mysql服务
service mysqld restart
5.重新输入mysql 进入数据库
6.接下来使用sql修改root的密码
mysql> use mysql;
mysql> update user set password=password('新密码') where user='root';
出现错误:
解决方式:
出现这个问题的原因是: mysql有个叫SQL_SAFE_UPDATES的变量,为了数据库更新操作的安全性,此值默认为1,所以才会出现更新失败的情况。
所以需要设置这个变量为0或off(更改是临时的,重启后失效)
mysql> set sql_safe_updates=0;
或者
mysql> set sql_safe_updates=off;
mysql> flush privileges;
mysql> quit
6.然后在my.cnf中去掉刚才添加的内容,然后重启mysql
登录的方式是:mysql –u root –p 然后会提示enter password
密码设置成功
7.使用可视化界面远程连接数据库
连接问题:
设置好连接的参数后,点击连接,出现如下错误
解决方式:
出现这种情况的原因可能有三种,
1.网络不通
可以本地使用ping 进行测试是否是网络不通
2.防火墙拦截
1) 开放防火墙端口
2) 添加需要监听的端口
/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
3) 保存设置
/etc/init.d/iptables save
4) 查看状态
/etc/init.d/iptables status
5) 临时关闭防火墙服务
service iptables stop
6) 开启防火墙服务
service iptables start
7) 开机不再启动防火墙服务
chkconfig iptables off
3.数据库当前账号拒绝远程访问
1) 如果你想myUser使用myPassword从任何主机连接到mysql服务器的话
mysql>GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
mysql>FLUSH PRIVILEGES;
2) 如果你想允许用户myUser从ip为192.168.*.*的主机连接到mysql服务器,并使用myPassword作为密码
mysql>GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.*.*' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
mysql>FLUSH PRIVILEGES;
3) 如果你想允许用户myUser从ip为192.168.1.6的主机连接到mysql服务器的dk数据库,并使用myPassword作为密码
mysql>GRANT ALL PRIVILEGES ON dk.* TO 'myUser'@'192.168.1.3' IDENTIFIED BY 'myPassword' WITH GRANT OPTION;
mysql>FLUSH PRIVILEGES;
4) 通过修改表来实现远程
mysql -u root –p
mysql>use mysql;
mysql>update user set host = '%' where user = 'root';
注意:使用update的时候,可能遇到设置用户密码的时候遇到样的权限问题,参考上面的设置,设置: mysql> set sql_safe_updates=0;然后重新使用update代码.
mysql>select host, user from user;
我遇到的连接不上的原因是防火墙原因和数据库当前账户不能远程连接的问题:
防火墙问题使用添加端口监视、保存设置可以解决
当前账户不能远程通过方式(3.2)以及在后面的修改表的方式(3.4)可以解决.
以上设置如果系统不启动还是成功的,但是如果系统重新启动,会出现在linux中输入mysql后就进入数据库,而且使用use mysql会没有用,造成这样的原因是在数据库中存在user为null的匿名账户,解决的方法是删除这些账户:
i.在 etc/my.cnf中添加” skip-grant-tables”,保存退出
ii.重启数据库服务
iii.使用mysql进入数据库
Use mysql
set sql_safe_updates=0;
delete from user where user = '';
exit
iv.然后在my.cnf把刚才添加的删除,保存退出
v.重启mysql服务
设置mysql服务开机自启
把服务文件拷贝到init.d下.并重命名mysqld
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
赋予可执行权限
chmod +x /etc/init.d/mysqld
添加服务
chkconfig --add mysqld
显示列表
chkconfig –list
如果看到mysql的服务,并且2,3,4,5都是on的话则成功,如果是off,则键入
chkconfig --level 2345 mysql on
重启服务器
验证 如果有监听,说明成功了
netstat -na | grep 3306
====数据库编码=============
查看编码:
show variables like 'char%';
查看数据库大小写
show variables like 'lower_case_table_names';
[client]
#设置客户端编码
default-character-set=utf8
[mysql]
#设置数据库编码
default-character-set=utf8
[mysqld]
#设置数据库编码
character-set-server=utf8
#设置表名不区分大小写
lower_case_table_names=1
#设置连接数
max_connections=1500
————————————————
转载:https://blog.csdn.net/kai3123919064/article/details/88431110