安装mysql解压缩版本其实很简单,安装官方指定目录/usr/local/mysql下只需要稍微改点东西就可以了,但是如果你解压到自己指定的目录就需要踩很多坑了,比如我,将mysql压缩包解压到了我自己指定的根目录下自己创建的/data目录下,就遇到了很多的问题!!!下面来看下吧!
一、先看有没有安装mysql:
1、检查库文件是否存在,如果有删除
输入命令:
[root@Mysqlzy ~]# rpm -qa | grep mysql
mysql-libs-5.1.52-1.el6_0.1.x86_64
2、如果执行上面命令后出现mysql-libs-5.1.52-1.el6_0.1.x86_64,将它删除调,如果有多个同上一 一删除
输入命令:
rpm -e mysql-libs-5.1.52.x86_64 --nodeps
3、检查mysql组和用户是否存在,如无创建
输入命令:cat /etc/group | grep mysql
输入命令:cat /etc/passwd | grep mysql
4、上面这种输入命令后是存在mysql组和用户,不用管继续向下操作,不存在执行增加
输入命令:添加组和用户
groupadd mysql
useradd -r -g mysql mysql
//useradd -r参数表示mysql用户是系统用户,不可用于登录系统
二、创建一个任意的目录,将mysql压缩包上传上去解压:
输入命令: tar -zxvf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz
解压后
如果感觉解压后名字太长不好操作那么就改个名字呗。
输入命令:mv mysql-5.7.17-linux-glibc2.5-x86_64/ mysql
当然,不想修改名称还可以创建一个链接,(类似于Windows快捷方式):
输入命令:ln -s mysql-5.7.17-linux-glibc2.5-x86_64 mysql
这时配置好后初步就完成了,可以进行下面的操作了,但是需要注意,如果mysql目录下没有data目录,手动建一个。用于用户存放数据。
三、初始化
1、解压完成mysql压缩包之后就能使用了吗?当然不是,我们需要初始化一下。
输入命令:
/data/mysql/bin/mysqld --initialize --user=mysql --datadir=/data/mysql/data --basedir=/data/mysql
--这是上面命令的详解:
/解压mysql路径/mysql/bin/mysqld --initialize --user=mysql --datadir=/解压mysql路径/mysql/data --basedir=/解压mysql路径/mysql
2、执行完成后如果没有发现ERROR信息继续操作下面步骤。
四、设置mysql以服务运行并且开机启动
1、输入命令: 此命令为将mysql注册为开机启动
[root@Mysqlzy data]# chkconfig --add mysql
执行后发现报错了,这是怎么回事?
这时我们先不设置开机启动,我们也可以使用命令手动启动,我们手动启动试下?
输入命令:[root@Mysqlzy data]# /etc/init.d/mysql start
手动启动也是报错,对于第一次安装mysql的我是一脸蒙*啊!后来问了度娘之后才知道少了一步,有个文件需要我们自己拷贝过去。
2、进入到我们解压的mysql目录下,找到有一个support-files的目录,进去找到有个mysql.server的文件,将这个文件拷贝到/etc/init.d/mysql 下面
输入命令: 拷贝文件
[root@Mysqlzy support-files]# cp mysql.server /etc/init.d/mysql
输入命令: 设置执行权限
[root@Mysqlzy support-files]# chmod +x /etc/init.d/mysql
3、这个时候我们再做上面的开机启动命令和手动启动命令
开机启动没报错,再执行手动启动还是报错,why?等等,上面写着/usr/local/mysql/[失败]sqld_safe,我们一开始说mysql默认路径是在/usr/local/路径下,但是我现在mysql的路径是在/data/路径下,那么肯定是有文件默认写死了/usr/local/,所以导致启动的时候找不到我们解压的路径导致的错误,经过各种度娘查找,终于找到了准确的答案
4、修改/etc/init.d/mysql 文件、修改/data/mysql/bin/mysqld_safe 文件
输入命令:vi /etc/init.d/mysql
进入之后将所有usr/local 全部换成我们解压缩的目录,我的是data
输入命令:vi /etc/init.d/mysql
同上:进入之后将所有usr/local 全部换成我们解压缩的目录,我的是data
如:
当然有很多处,不一 一列出了。
5、这时再启动:
。。。。还是报错,此时此刻,心中有一万匹那个什么在奔腾,算了发牢骚也没用呀,解决问题吧。
最后发现是没有给解压缩的mysql文件夹设置mysql用户和组。。。进入我们mysql压缩目录
输入命令:chown mysql:mysql mysql
这时再启动:
哈哈哈哈!终于起来了,我们进入mysql执行下查询语句或者创建数据库试下吧!
五、这时进入mysql还不行,还得将mysql/support-files下的my-default.cnf改名为my.cnf,拷到/etc下
输入命令:
cp /usr/local/apps/mysql/support-files/my-default.cnf /etc/my.cnf
使用vim打开后编辑(以下仅为基础配置)
输入命令:
vim /etc/my.cnf
可以根据自己项目的真实需要相应的修改下面这些参数
[client]
no-beep
socket =/data/mysql/mysql.sock
# pipe
# socket=0.0
port=3306
[mysql]
default-character-set=utf8
[mysqld]
basedir=/data/mysql
datadir=/data/mysql/data
port=3306
# skip-grant-tables
skip-name-resolve
socket =/data/mysql/mysql.sock
character-set-server=utf8
default-storage-engine=INNODB
explicit_defaults_for_timestamp = true
# Server Id.
server_id = 3306
max_connections=2000
query_cache_size=0
table_open_cache=2000
tmp_table_size=246M
thread_cache_size=300
#限定用于每个数据库线程的栈大小。默认设置足以满足大多数应用
thread_stack = 192k
key_buffer_size=512M
read_buffer_size=4M
read_rnd_buffer_size=32M
innodb_data_home_dir =/data/mysql/data
innodb_flush_log_at_trx_commit=0
innodb_log_buffer_size=16M
innodb_buffer_pool_size=256M
innodb_log_file_size=128M
innodb_thread_concurrency=128
innodb_autoextend_increment=1000
innodb_buffer_pool_instances=8
innodb_concurrency_tickets=5000
innodb_old_blocks_time=1000
innodb_open_files=300
innodb_stats_on_metadata=0
innodb_file_per_table=1
innodb_checksum_algorithm=0
back_log=80
flush_time=0
join_buffer_size=128M
max_allowed_packet=1024M
max_connect_errors=2000
open_files_limit=4161
query_cache_type=0
sort_buffer_size=32M
table_definition_cache=1400
binlog_row_event_max_size=8K
sync_master_info=10000
sync_relay_log=10000
sync_relay_log_info=10000
#批量插入数据缓存大小,可以有效提高插入效率,默认为8M
bulk_insert_buffer_size = 64M
interactive_timeout = 120
wait_timeout = 28800
log-bin-trust-function-creators=1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
lower_case_table_names=1
slow_query_log = ON
slow_query_log_file = /data/mysql/data/mysql_query_slow.log
long_query_time = 5
binlog-do-db=map_db
#启用二进制日志
log-bin=mysql-bin
#服务器唯一ID
server-id=3306
sock文件是用于建立两个程序之间的连接使用的。需要给与mysql用户(上文创建了)权限。
如果socket 后面指定的文件夹如果存在不用管,如不存在需要自行创建。
添加完后可以修改权限:
输入命令 :[root@localhost mysql]# chown -R mysql:mysql 文件夹名
六、客户端连接测试
输入命令:
[root@Mysqlzy /]# /data/mysql/bin/mysql -uroot -p
我在登陆时时出现了这个错误(密码不正确):
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
解决方法:
打开my.cnf文件
在[mysqld]下添加这么一行
skip-grant-tables
[mysqld]
basedir=/data/mysql
datadir=/data/mysql/data
port=3306
# skip-grant-tables
skip-name-resolve
socket =/data/mysql/mysql.sock
skip-grant-tables
跳过密码校验,这样登陆mysql就不需要密码了
记住改完文件需要重启mysql哦
输入命令: /etc/init.d/mysql restart
然后再使用命令:/data/mysql/bin/mysql -uroot -p 就进去啦
然后使用sql语句修改root用户的密码
update mysql.user set authentication_string=password('123456') where user='root' ;
flush privileges;
注意:这里使用的是authentication_string,而不是password,因为在mysql5.7开始就没有这个命令了。
错误的命令:update mysql.user set password=password('123456') where user='root' ;
然后,再将skip-grant-tables从my.cnf文件中去掉,即可完成。
重启mysql服务
再次运行
[root@localhost mysql]#/data/mysql/bin/mysql -uroot -p
/data/mysql/bin/mysql -uroot -p
就完成了
使用新密码登陆之后不管输入什么命令都报
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
解决方式:输入语句
SET PASSWORD = PASSWORD('your new password');
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
flush privileges;
修改远程连接权限:
update user set host = '%' where user ='root';
flush privileges;