工作需要搭建MySQL主从服务器,以达到数据库备份及应急目的....
声明:自己接触Linux方面搭建服务器方面知识比较少,在linux上操作过仅仅是搭建过PHP环境LAMP(编译安装),基本都是靠万能的搜索引擎协助完成,下面是自己搭建过程的记录:
Q:MySQL主从是什么意思?作用是?原理是?如何实现?【就像是大门保安都会问一句富有哲理的问题:你从哪里来? 要到哪里去?】
A:MySQL主从:两台主机master和slave,实现同步备份数据库,读写分离等等.....(详细请戳 http://my.oschina.net/cimu/blog/165019)【先利用搜索引擎把概念和原理搞清楚,让自己有个大概的认识,然后再去动手实践】
环境准备(Linux都是CentOS release 6.4 Final):
①、mysql-5.5.33.tar.gz(http://mysql.llarian.net/Downloads/MySQL-5.5/mysql-5.5.33.tar.gz)提示:安装ncurses-devel包
②、cmake (mysql5.5以上版本都需要cmake来配置)提示安装gcc-c++包
配置MySQL出现错误:
mysql启动失败 The server quit without updating PID file
******一度重装cmake和mysql达N次(想重装系统的心都有了),网上搜索答案许久,一堆解决方法如下:********
① 1.可能是/usr/local/mysql/data/rekfan.pid文件没有写的权限
解决方法 :给予权限,执行 chown -R mysql:mysql /var/data chmod -R 755 /usr/local/mysql/data然后重新启动mysqld!
② 可能进程里已经存在mysql进程
解决方法:用命令ps -ef|grep mysqld查看是否有mysqld进程,如果有使用kill -9 进程号杀死,然后重新启动mysqld!
③ 可能是第二次在机器上安装mysql,有残余数据影响了服务的启动。
解决方法:去mysql的数据目录/data看看,如果存在mysql-bin.index,就赶快把它删除掉吧,它就是罪魁祸首了。本人就是使用第三条方法解决的 !
④ mysql在启动时没有指定配置文件时会使用/etc/my.cnf配置文件,请打开这个文件查看在[mysqld]节下有没有指定数据目录(datadir)。
解决方法:请在[mysqld]下设置这一行:datadir = /usr/local/mysql/data
⑤ skip-federated字段问题
解决方法:检查一下/etc/my.cnf文件中有没有没被注释掉的skip-federated字段,如果有就立即注释掉吧
⑥ 错误日志目录不存在
解决方法:使用chown chmod命令赋予mysql所有者及权限
⑦ selinux惹的祸,如果是centos系统,默认会开启selinux
解决方法:关闭它,打开/etc/selinux/config,把SELINUX=enforcing改为SELINUX=disabled后存盘退出重启机器试试。但是没有解决,最后直接给/usr/local/mysql/data 目录 chmod 777 -R /usr/local/myql/data 问题解决应该是权限问题,不能生成localhost.localdomain.pid 文件
配置单向主从服务器:
① 设置配置文件vi /etc/my.cnf
server-id=1 #【必须】服务器ID,一般取IP地址末段(默认开启为1)
log-bin=mysql-bin #【必须】启动二进制文件,主服必须开启(默认开启)
binlog_format=mixed #复制类型
主服务器还要添加以下参数:
-------------------------------------------------------------------------
binlog-do-db=bss_box #需要复制的数据库【按需要填写】
binlog-ignore-db=XXX #需要忽略的复制数据库【选填】
-------------------------------------------------------------------------
从服务器选填参数:
-------------------------------------------------------------------------
replicate-do-db=bss_box #需要同步主服的数据库【选填】
replicate-ignore-db=XXX #需要忽略同步主的数据库【选填】
-------------------------------------------------------------------------
② 授权从服务器(mysql -uroot -p 在主服上执行)
grant replication slave on *.* to 'backup'@'192.168.5.167' identified by 'backup';
show master status; #记录master的File和Position
③ 设置从服务器(mysql -uroot -p 在从服务执行)
change master to master_host='192.168.5.19',master_user='backup',master_password='backup',master_log_file='mysql
bin.000001',master_log_pos=107;
start slave; #开启slave
show slave status\G; #查看salve状态【Slave_IO_Running: Yes】【Slave_SQL_Running: Yes】都为Yes表示已经成功
配置双向主从服务器:
①. 主服务器上配置/etc/my.cnf
server-id=19 //ip的最后一段
binlog_formate=mixed //复制的类型
binlog-do-db=bss_box //需要复制数据库【不填的话,更新其他数据库数据会影响file和position】
binlog-ignore-db= XXXX //忽略复制数据库,选填项
replicate-do-db=bss_box //slave同步的数据库【指定同步主数据库数据】
replicate-ignore-db=XXXXX //slave忽略数据库,选填项
②. 从服务器上配置/etc/my.cnf(同上)
保证主从需要复制同步的数据库数据一致
③. 主从数据库:mysql -uroot -p
各自授权同步账号和设置同步主服务器参数
grant replication slave on *.* to 'backup'@'192.168.5.xx' identified by 'backup';
show master status; //记录file和position
change master to master_host='192.168.5.xx',master_user='backup',master_password='backup',master_log_file='mysql-bin.000001',master_log_pos=107;
start slave;
show slave status\G;
测试...