`

Linux下Mysql源码安装

阅读更多
1.假设已经有mysql-5.6.23-linux-glibc2.5-x86_64.tar.gz

(1)创建mysql的安装目录及数据库存放目录      
解压缩下载的源码包,目录结构,特殊指定的目录除外:
           ./bin                               #mysql用户可执行文件目录
           ./include/mysql           #mysql C头文件目录
           ./info                              #mysql 信息文件目录
           ./lib/mysql                    #mysql库文件目录
           ./libexec                        #mysql后台daemon程序目录
           ./man                             #mysql联机帮助文档目录
           ./mysql-test                  #mysql测试程序目录
           ./share/mysql              #mysql公用文件目录,包括字符集、配置文件模板、启动脚本、初始化SQL文件等
           ./sql-bench                   #mysql压力测试程序目录
           /etc/my.cnf                    #mysql配置文件
           /etc/rc.d/init.d/mysqld #mysqld服务启动脚本

将下载的源码包移至工作目录:(即源码安装)
[root@localdomain~]#mv  mysql-5.6.23-linux-glibc2.5-x86_64.tar.gz  /usr/local/
进入工作目录并用tar命令解压源码包:
[root@localdomain~]#cd  /usr/local/
[root@localdomain~]#tar zxvf  mysql-5.6.23-linux-glibc2.5-x86_64.tar.gz
重命名mysql-5.6.23-linux-glibc2.5-x86_64为mysql
[root@localdomain~]#mv mysql-5.6.23-linux-glibc2.5-x86_64 mysql
命令执行结束后,当前工作目录下将生成一个新的子目录mysql-5.6.23-linux-glibc2.5-x86_64/,此目录下即为mysql的源码文件。
目录说明:
/usr/local/mysql        //安装目录
/usr/local/mysql/data         //数据库存放目录

(2)创建mysql用户及用户组

[root@localdomain~]groupadd mysql
[root@localdomain~]useradd -r -g mysql mysql
#groupadd mysql
#增加一个名为 mysql的用户。

-g:指定新用户所属的用户组(group)

2.配置

(1)设置目录权限

[root@localdomain~]# cd /usr/local/mysql
[root@localdomain mysql]# chown -R root:mysql . //把当前目录中所有文件的所有者所有者设为root,所属组为mysql
[root@localdomain mysql]# chown -R mysql:mysql data
(2)
[root@localdomain mysql]# cp my.cnf /etc/my.cnf //将mysql的启动服务添加到系统服务中

(3)创建系统数据库的表

[root@localdomain mysql]# cd /usr/local/mysql
[root@localdomain mysql]#  ./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data
(4)设置环境变量

[root@localdomain~]# vi /root/.bash_profile

在PATH=$PATH:$HOME/bin添加参数为:

PATH=$PATH:$HOME/bin:/usr/local/mysql/bin:/usr/local/mysql/lib

[root@localdomain~]#source /root/.bash_profile


(5)手动启动mysql

[root@localdomain~]# cd /usr/local/mysql

[root@localdomain mysql]# ./bin/mysqld_safe --user=mysql &   //启动MySQL,但不能停止

启动日志写在此文件下:/usr/local/mysql/data/localhost.err

关闭MySQL服务

[root@localdomain mysql]# mysqladmin -u root -p shutdown  //这里MySQL的root用户还没有配置密码,所以为空值。需要输入密码时,直接点回车键即可。

复制代码

(6)另一种简单的启动mysql的方法(mysql已经被添加到系统服务中)

[root@localdomain~]# service mysql.server start 
[root@localdomain~]# service mysql.server stop
[root@localdomain~]# service mysql.server restart

如果上述命令出现:mysql.server 未识别的服务

则可能mysql还没添加到系统服务中,下面用另一种方法添加:

[root@localdomain mysql]# cp support-files/mysql.server  /etc/init.d/mysql //将mysql的启动服务添加到系统服务中

注意:主要是将mysql.server拷贝到/etc/init.d中,命名为mysql。在有的系统中,mysql.server在/usr/local/mysql/share/mysql/mysql.server中,而本系统中,mysql.server在/usr/local/mysql/support-files/mysql.server中。

然后再用#service mysql start 来启动mysql即可。


(7)修改MySQL的root用户的密码以及打开远程连接
复制代码

[root@localdomain~]# mysql -u root mysql

mysql>use mysql;
mysql>desc user;
mysql> GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "root";  //为root添加远程连接的能力。
mysql>update user set Password = password('xxxxxx') where User='root';
mysql>select Host,User,Password  from user where User='root';
mysql>flush privileges;
mysql>exit

重新登录:mysql -u root -p

若还不能进行远程连接,则关闭防火墙
[root@localdomain~]# /etc/rc.d/init.d/iptables stop

复制代码

注:如果不能远程连接,出现错误mysql error number 1130,则加入下面语句试试:

mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '******' WITH GRANT OPTION;

3.问题汇总:
(1)FATAL ERROR: please install the following Perl modules before executing ./mysql_install_db
解决方法:[root@localdomain mysql]#yum install -y perl-Module-Install.noarch
(2)启动如果报错,应该是MariaDB启动的时候要默认创建一些日志文件,或者运行相关的文件,但是没有创建,或者指定的目录不存在
通常是因为:
一. 在 /var/log/mariadb/ 里创建 mariadb.log 文件没有权限
二. 在 /var/run/mariadb 里创建 mariadb.pid 也没有权限
chown mysql -R /var/run/mariadb #所有权给mysql用户,否则不能创建/var/run/mariadb/mariadb.pid文件
(3)ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)
此错误是因为socket位置导致, 加个软链, 当然修改/etc/my.cnf的sock位置也可以
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
(4)/usr/local/mysql/bin/mysqladmin: connect to server at 'localhost' failed error: 'Access denied for user 'root'@'localhost' (using password: NO)'

在my.conf文件中的:datadir 下面加入如下内容:skip-grant-tables
重启mysql服务,用命令mysql -uroot 进入数据库,用命令:show databases;查看是否有mysql数据库
如有名字为mysql的数据库,则用命令:update mysql.user set password=PASSWORD("密码") where user='root'; 修改密码
用命令:flush privilege 更新权限表; 退出后 去掉my.ini里添加的:skip-grant-tables内容 重启mysql服务后用
命令:mysql -uroot -p 回车输入密码后正常进入数据库。。  可用grant 命令新建用户。
[mysqld]
port=3306
datadir=/var/lib/mysql
skip-grant-tables
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
user=mysql
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
4.设置mysql帐号
mysql安装后默认生成两个帐号:一个是root,未设置密码,可以从本机登录到mysql;另一个是匿名帐号,无帐号名、无密码,可以从本机登录,未提供用户名的连接都将假定为此帐号。这样的设置存在着安全隐患,按下面的步骤进行更改。
以root帐号连接到mysql服务器:
mysql -u root
如果提示找不到mysql文件,请尝试使用绝对路径,如本文示例为:
/usr/local/mysql/bin/mysql -u root
命令成功执行后将进入到mysql命令提示符下:
mysql>
(以下命令均在mysql命令提示符下执行)
改变当前数据库为mysql:
use mysql
设置从本地主机登录的root帐号密码:
set password for root@localhost=password('your password');
或:
update user set password=password('your password') where user='root' and host='localhost';
删除匿名帐号:
delete from user where user='' ;
删除密码为空的帐号:
delete from user where password='';
删除允许非localhost主机登录的帐号:
delete from user where host<>'localhost' ;
执行下面的命令使更改生效:
flush privileges ;
执行下面的命令退出mysql命令行:
quit
或:
/q

5.问题集锦:
(1)either host 'localhost.localdomain' nor 'localhost' could be looked up with

/usr/bin/resolveip

Please configure the 'hostname' command to return a correct hostname.
错误:

解决办法

开始初始化数据库
[root@mysql media]# cd /usr/local/mysql/scripts/
[root@mysql scripts]# ./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/mysql/data/
WARNING: The host 'mysql' could not be looked up with /usr/local/mysql/bin/resolveip.
This probably means that your libc libraries are not 100 % compatible
with this binary MySQL version. The MySQL daemon, mysqld, should work
normally with the exception that host name resolving will not work.
This means that you should use IP addresses instead of hostnames
when specifying MySQL privileges !
Installing MySQL system tables.../usr/local/mysql/bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
[root@mysql scripts]# yum install -y libaio
[root@mysql scripts]# ./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/mysql/data/

在/etc/hosts配置文件中增加IP地址和主机名的映射



[root@localdomain Packages]# cat /etc/hosts

127.0.0.1 localhost localdomain localhost4 localhost4.localdomain4

::1 localhost localdomainlocalhost6 localhost6.localdomain6

IP地址 localdomain

(2).Starting MySQL..The server quit without updating PID file (/var/lib/mysql/localhost.localdomain.pid
问题描述: [root@bogon mysql-5.1.41]# /etc/rc.d/init.d/mysqld startStarting MySQL.Manager of pid-file quit without updating file.[失败] --------------------------- 解决办法:配置的时候有一个步骤是 cp support-files/my-medium.cnf /etc/my.cnf ; 就编辑my.cnf,在[mysqld]下面加上:datadir = /usr/local/mysql/data 例如# The MySQL server[mysqld]port            = 3306socket          = /tmp/mysql.sockskip-lockingkey_buffer_size = 16Mmax_allowed_packet = 1Mtable_open_cache = 64sort_buffer_size = 512Knet_buffer_length = 8Kread_buffer_s ...

(3).ERROR 2003 (HY000): Can't connect to MySQL server
一.问题的提出


/usr/local/webserver/mysql/bin/mysql -u root -h 172.29.141.112  -p -S /tmp/mysql.sock
Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on '172.29.141.112' (113)


二.问题的分析



出现上述问题,可能有以下几种可能

1. my.cnf 配置文件中 skip-networking 被配置

skip-networking 这个参数,导致所有TCP/IP端口没有被监听,也就是说出了本机,其他客户端都无法用网络连接到本mysql服务器

所以需要把这个参数注释掉。



2.my.cnf配置文件中 bindaddress 的参数配置

bindaddress,有的是bind-address  ,这个参数是指定哪些ip地址被配置,使得mysql服务器只回应哪些ip地址的请求,所以需要把这个参数注释掉。



3.防火墙的原因

通过 /etc/init.d/iptables  stop  关闭防火墙

我的问题,就是因为这个原因引起的。关闭mysql 服务器的防火墙就可以使用了。



三.问题的解决

1.  如果是上述第一个原因,那么 找到 my.cnf  ,注释掉 skip-networking 这个参数

sed -i  's%skip-networking%#skip-networking%g'  my.cnf



2. 如果是上述第二个原因,那么  找到 my.cnf  ,注释掉 bind-address  这个参数

sed -i  's%bind-address%#bind-address%g'    my.cnf

sed -i  's%bindaddress%#bindaddress%g'      my.cnf



最好修改完查看一下,这个参数。



3.如果是上述第三个原因,那么 把防火墙关闭,或者进行相应配置



/etc/init.d/iptables stop
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics