基本流程
主库ip:192.168.1.100 从库IP:192.168.1.200
首先记得关闭防火墙。
修改/etc/selinux/config 文件的配置
selinux=disabled
关闭防火墙服务
service iptables stop
安装mysql数据库:
首先先查看是否已经安装mysql:
rpm -qa|grep -i mysql
如果命令执行之后有结果,就是已经安装过了。
卸载:
rpm -e 包名
有时候可能卸载不成功,因为与其他安装包存在依赖关系
强制卸载 :
rpm --nodeps -e 包名
一般来说卸载了mysql,但是my.cnf等文件并不会自动删除的。
以防万一可以查找到所有mysql相关的安装目录删除
find / -name mysql*
rm -rf /var/lib/mysql
rm -rf /etc/my.cnf
安装好mysql之后
修改数据库配置文件:
通过命令查看主机上数据库安装情况
ps -ef|grep mysql
可以知道mysql数据安装之后,datadir,basedir,以及pid文件,sock文件,err文件和日志文件等存放路径。
从/urs/ 下复制my.cnf文件到 /etc/my.cnf。
对主库、从库:将 ps -ef 看到的 这些参数记录入my.cnf文件。
对主库:添加:
server-id=1 (值比从库的server-id小就行了,除了0。)
log-bin=mysql-bin
replicate-do-db=test
replicate-do-db=iris
(要同步多少个库,就写多少行。也可以写在同一行,库名用逗号隔开。)
对从库:添加:
server-id=2(值比从库的server-id小就行了,除了0。)
log-bin=mysql-bin
relay-log-bin=mysql-relay-log
简单的主从,上面的配置就够了。
主库、从库配置文件均修改完毕之后,进入数据库:
在主库:
创建用户back,同时给它授权,允许从库(200)通过此账户进行主从同步。
mysql>grant replication slave on *.* to 'back'@'192.168.1.200 identified by 'back';
mysql>flush privileges;
获取master_log_file和master_log_pos的值。
mysql>show master status;
在从库:
进入从库的数据库,未启动slave的状态,输入如下命令:
mysql> change master to
~>master_host='192.168.1.100',
~>master_user='back',
~>master_password='back',
~>master_port=3306,
~>master_log_file='mysql-bin.000005',
~>master_log_pos=120;
接着查看slave的状态,是否与上述执行结果一样,输入如下命令;
mysql>show slave staus;
这个时候,因为slave还未启动,所以
slave_IO_running 和slave_SQL_running 都是no;
接着,启动slave
mysql>start slave
这时候再查看slave的状态,
mysql>show slave staus;
slave_IO_running 和slave_SQL_running 都变为 yes 了;
说明,主从的连接和同步正常。
在配置过程中,可能遇到很多问题。
1.如:
主从虽然配置完毕,但是,主库和从库的同步进行并不正常。
Slave_IO_Running: Connecting
Slave_SQL_Running: Yes
这结果说明,从库连接不上主库的数据库。
可以在从库上连接主库数据库做测试,
[root@ldw~] mysql -h 192.168.1.100 -P 3306 -uback -p
Enter Password:
ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (113)
这种情况可能是网络不通或者端口不可用。
看看从库能否正常在本地访问主库的数据库。如下:
在从库上打开一个新的命令窗口:
通过telnet 方式测试网络的连通性。
输入:telnet 192.168.1.100 3306
发现
Trying192.168.1.100...
telnet: connect to address192.168.1.100.: No route to host
可能
1> 、网络不通:
可以先通过ping命令查看网络情况。
2>、访问没权限:
检查100数据库里mysql.user表里面授权给200访问的用户的权限网
3>、防火墙屏蔽了端口:
首先确认关闭了防火墙
查看/etc/selinux/config文件的配置如下:
selinux=disabled
并且,防火墙服务状态也是关闭的
service iptables status
如果网络仍无法连通,尝试清空100机器上的防火墙策略
iptables -F
4>、密码错误
(如果忘记密码,进入数据库修改密码) 使用正确的密码再次尝试连接。
5> 服务没启动
“telnet 192.168.1.100 3306” 不通或在服务列表里面检查服务没存在。
当可以通过telnet 方式访问到100的数据库,说明网络和端口都可用。
在从库上访问主库数据库:
[root@ldw~] mysql -h 192.168.1.100 -P 3306 -uback -p
ERROR 1045 (28000): Access denied for user 'back'@'192.168.1.200' (using password: yes)
1>这种情况可能是输入密码错入了。
在主库中查看root 用户的密码(可能加密了,看不了明文,那就试着改一个新的密码),用对应的密码再登陆。
2>可能是权限问题,使用连接的用户没有被授权,不允许连接100
在主库上,进入数据库,给back用户重新授权(可试着先授予所有权限,all privilege),并 flush privileges,再次尝试连接,发现可以了。
3>(这是我遇到的问题)
配置主从过程中,别的网络管理员修改了主机名(我并不知道这件事),并重启机器,修改生效。导致,我修改配置文件过后,
service mysql restart
ERROR! MySQL server PID file could not be found!
Starting MySQL.. ERROR! The server quit without updating PID file (/usr/local/mysql/var/ldw.pid).
数据库启动失败。
这时候,可以通过修改hosts文件,增加一行,如:
192.168.1.100 ldw
然后重启,数据库可以正常启动了。