MySQL主从配置的简单流程

来源:互联网 发布:python scope 编辑:程序博客网 时间:2024/05/29 03:47

基本流程
主库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/mysqlrm -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-binreplicate-do-db=testreplicate-do-db=iris

(要同步多少个库,就写多少行。也可以写在同一行,库名用逗号隔开。)
对从库:添加:

server-id=2(值比从库的server-id小就行了,除了0。)log-bin=mysql-binrelay-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 -pEnter 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 -pERROR 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

然后重启,数据库可以正常启动了。

0 0
原创粉丝点击