Linux下Mysql源码安装
1.假设已经有mysql-5.6.23-linux-glibc2.5-x86_64.tar.gz
(1)创建mysql的安装目录及数据库存放目录
解压缩下载的源码包,目录结构,特殊指定的目录除外:
./bin#mysql用户可执行文件目录
./include/mysql#mysqlC头文件目录
./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~]#mvmysql-5.6.23-linux-glibc2.5-x86_64.tar.gz/usr/local/
进入工作目录并用tar命令解压源码包:
[root@localdomain~]#cd/usr/local/
[root@localdomain~]#tarzxvfmysql-5.6.23-linux-glibc2.5-x86_64.tar.gz
重命名mysql-5.6.23-linux-glibc2.5-x86_64为mysql
[root@localdomain~]#mvmysql-5.6.23-linux-glibc2.5-x86_64mysql
命令执行结束后,当前工作目录下将生成一个新的子目录mysql-5.6.23-linux-glibc2.5-x86_64/,此目录下即为mysql的源码文件。
目录说明:
/usr/local/mysql//安装目录
/usr/local/mysql/data//数据库存放目录
(2)创建mysql用户及用户组
[root@localdomain~]groupaddmysql
[root@localdomain~]useradd-r-gmysqlmysql
#groupaddmysql
#增加一个名为mysql的用户。
-g:指定新用户所属的用户组(group)
2.配置
(1)设置目录权限
[root@localdomain~]#cd/usr/local/mysql
[root@localdomainmysql]#chown-Rroot:mysql. //把当前目录中所有文件的所有者所有者设为root,所属组为mysql
[root@localdomainmysql]#chown-Rmysql:mysqldata
(2)
[root@localdomainmysql]#cpmy.cnf/etc/my.cnf //将mysql的启动服务添加到系统服务中
(3)创建系统数据库的表
[root@localdomainmysql]#cd/usr/local/mysql
[root@localdomainmysql]#./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@localdomainmysql]#./bin/mysqld_safe--user=mysql& //启动MySQL,但不能停止
启动日志写在此文件下:/usr/local/mysql/data/localhost.err
关闭MySQL服务
[root@localdomainmysql]#mysqladmin-uroot-pshutdown //这里MySQL的root用户还没有配置密码,所以为空值。需要输入密码时,直接点回车键即可。
复制代码
(6)另一种简单的启动mysql的方法(mysql已经被添加到系统服务中)
[root@localdomain~]#servicemysql.serverstart
[root@localdomain~]#servicemysql.serverstop
[root@localdomain~]#servicemysql.serverrestart
如果上述命令出现:mysql.server未识别的服务
则可能mysql还没添加到系统服务中,下面用另一种方法添加:
[root@localdomainmysql]#cpsupport-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中。
然后再用#servicemysqlstart来启动mysql即可。
(7)修改MySQL的root用户的密码以及打开远程连接
复制代码
[root@localdomain~]#mysql-urootmysql
mysql>usemysql;
mysql>descuser;
mysql>GRANTALLPRIVILEGESON*.*TOroot@"%"IDENTIFIEDBY"root"; //为root添加远程连接的能力。
mysql>updateusersetPassword=password('xxxxxx')whereUser='root';
mysql>selectHost,User,PasswordfromuserwhereUser='root';
mysql>flushprivileges;
mysql>exit
重新登录:mysql-uroot-p
若还不能进行远程连接,则关闭防火墙
[root@localdomain~]#/etc/rc.d/init.d/iptablesstop
复制代码
注:如果不能远程连接,出现错误mysqlerrornumber1130,则加入下面语句试试:
mysql>GRANTALLPRIVILEGESON*.*TO'root'@'%'IDENTIFIEDBY'******'WITHGRANTOPTION;
3.问题汇总:
(1)FATALERROR:pleaseinstallthefollowingPerlmodulesbeforeexecuting./mysql_install_db
解决方法:[root@localdomainmysql]#yuminstall-yperl-Module-Install.noarch
(2)启动如果报错,应该是MariaDB启动的时候要默认创建一些日志文件,或者运行相关的文件,但是没有创建,或者指定的目录不存在
通常是因为:
一.在/var/log/mariadb/里创建mariadb.log文件没有权限
二.在/var/run/mariadb里创建mariadb.pid也没有权限
chownmysql-R/var/run/mariadb#所有权给mysql用户,否则不能创建/var/run/mariadb/mariadb.pid文件
(3)ERROR2002(HY000):Can’tconnecttolocalMySQLserverthroughsocket‘/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:connecttoserverat'localhost'failederror:'Accessdeniedforuser'root'@'localhost'(usingpassword:NO)'
在my.conf文件中的:datadir下面加入如下内容:skip-grant-tables
重启mysql服务,用命令mysql-uroot进入数据库,用命令:showdatabases;查看是否有mysql数据库
如有名字为mysql的数据库,则用命令:updatemysql.usersetpassword=PASSWORD("密码")whereuser='root';修改密码
用命令:flushprivilege更新权限表;退出后去掉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
#Disablingsymbolic-linksisrecommendedtopreventassortedsecurityrisks
symbolic-links=0
#Settingsuserandgroupareignoredwhensystemdisused.
user=mysql
#Ifyouneedtorunmysqldunderadifferentuserorgroup,
#customizeyoursystemdunitfileformariadbaccordingtothe
#instructionsinhttp://fedoraproject.org/wiki/Systemd
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
#
#includeallfilesfromtheconfigdirectory
#
!includedir/etc/my.cnf.d
4.设置mysql帐号
mysql安装后默认生成两个帐号:一个是root,未设置密码,可以从本机登录到mysql;另一个是匿名帐号,无帐号名、无密码,可以从本机登录,未提供用户名的连接都将假定为此帐号。这样的设置存在着安全隐患,按下面的步骤进行更改。
以root帐号连接到mysql服务器:
mysql-uroot
如果提示找不到mysql文件,请尝试使用绝对路径,如本文示例为:
/usr/local/mysql/bin/mysql-uroot
命令成功执行后将进入到mysql命令提示符下:
mysql>
(以下命令均在mysql命令提示符下执行)
改变当前数据库为mysql:
usemysql
设置从本地主机登录的root帐号密码:
setpasswordforroot@localhost=password('yourpassword');
或:
updateusersetpassword=password('yourpassword')whereuser='root'andhost='localhost';
删除匿名帐号:
deletefromuserwhereuser='';
删除密码为空的帐号:
deletefromuserwherepassword='';
删除允许非localhost主机登录的帐号:
deletefromuserwherehost<>'localhost';
执行下面的命令使更改生效:
flushprivileges;
执行下面的命令退出mysql命令行:
quit
或:
/q
5.问题集锦:
(1)eitherhost'localhost.localdomain'nor'localhost'couldbelookedupwith
/usr/bin/resolveip
Pleaseconfigurethe'hostname'commandtoreturnacorrecthostname.
错误:
解决办法
开始初始化数据库
[root@mysqlmedia]#cd/usr/local/mysql/scripts/
[root@mysqlscripts]#./mysql_install_db--user=mysql--basedir=/usr/local/mysql--datadir=/mysql/data/
WARNING:Thehost'mysql'couldnotbelookedupwith/usr/local/mysql/bin/resolveip.
Thisprobablymeansthatyourlibclibrariesarenot100%compatible
withthisbinaryMySQLversion.TheMySQLdaemon,mysqld,shouldwork
normallywiththeexceptionthathostnameresolvingwillnotwork.
ThismeansthatyoushoulduseIPaddressesinsteadofhostnames
whenspecifyingMySQLprivileges!
InstallingMySQLsystemtables.../usr/local/mysql/bin/mysqld:errorwhileloadingsharedlibraries:libaio.so.1:cannotopensharedobjectfile:Nosuchfileordirectory
[root@mysqlscripts]#yuminstall-ylibaio
[root@mysqlscripts]#./mysql_install_db--user=mysql--basedir=/usr/local/mysql--datadir=/mysql/data/
在/etc/hosts配置文件中增加IP地址和主机名的映射
如
[root@localdomainPackages]#cat/etc/hosts
127.0.0.1localhostlocaldomainlocalhost4localhost4.localdomain4
::1localhostlocaldomainlocalhost6localhost6.localdomain6
IP地址localdomain
(2).StartingMySQL..TheserverquitwithoutupdatingPIDfile(/var/lib/mysql/localhost.localdomain.pid
问题描述:[[email protected]]#/etc/rc.d/init.d/mysqldstartStartingMySQL.Managerofpid-filequitwithoutupdatingfile.[失败]---------------------------解决办法:配置的时候有一个步骤是cpsupport-files/my-medium.cnf/etc/my.cnf;就编辑my.cnf,在[mysqld]下面加上:datadir=/usr/local/mysql/data例如#TheMySQLserver[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).ERROR2003(HY000):Can'tconnecttoMySQLserver
一.问题的提出
/usr/local/webserver/mysql/bin/mysql-uroot-h172.29.141.112-p-S/tmp/mysql.sock
Enterpassword:
ERROR2003(HY000):Can'tconnecttoMySQLserveron'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/iptablesstop关闭防火墙
我的问题,就是因为这个原因引起的。关闭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/iptablesstop