您的位置:首页 > 数据库 > MySQL

Mysql主从数据库配置

2016-07-27 15:50 411 查看
MySQL数据库是一种功能性不是很强大的关系型数据库管理系统,尽管功能不完善,但MySQL数据库凭借着速度快、适应性好、可靠性高等优点赢得了广大用户的青睐,看MySQL数据库的性能如何,就应该首先从MySQL数据库的配置看起,下文中就为大家详细讲述MySQL数据库的主从配置问题。

server-id一项可自行设置,但尽量不要设为1,也不能和从服务器重复。

需要两台主机,分别担任主服务器和从服务器

主服务器IP:10.198.195.162 linux系统

从服务器IP:10.101.145.59 win7系统

首先分别在两台服务上配置mysql服务。

1.注服务器

首先修改 vim /etc/my.cnf

在[mysqld]下面添加如下内容

log-bin=master-bin
log-bin-index=master-bin.index
server-id=11


server-id尽量别去1;保存后运行

service mysqld restart 起不来

[root@ctohome.com ~]# rpm -q mysql 查询发现mysql安装否



自己安装service

执行 mysql

create user repl;

GRANT REPLICATION SLAVE ON . TO ‘repl’ @’10.101.145%’ IDENTIFIED BY ‘repl’;

show master status;



2.本地从服务器

windows找到my.ini文件



修改

修改或添加如下条目:

relay-log=relay-log-bin

relay-log-index=slave-relay-bin.index

server-id=22

注:server-id不能与主服务器的相同

C:\Program Files\MySQL\MySQL Server 5.6\bin

在bin目录下执行 mysqld -install

重启mysql

两种方式

一、MYSQL服务

  我的电脑——(右键)管理——服务与应用程序——服务——MYSQL——开启(停止、重启动)

  二、命令行方式

  Windows

  1.点击“开始”->“运行”(快捷键Win+R)。

  2.启动:输入 net stop mysql

  3.停止:输入 net start mysql

  提示* Redhat Linux 也支持service command,启动:# service mysqld start 停止:# service mysqld stop 重启:# service mysqld restart

  * Windows下不能直接重启(restart),只能先停止,再启动。

  其实我们可以通过批处理完成 保存为 mysqlreset.bat

  代码如下:

  net stop mysql

  net start mysql

登录mysql:

mysql -u root -p

stop slave;

设置整整的数据同步

change master to

master_host=’10.199.173.221’, –主库ip

master_user=’repl’, –刚刚在主库中配置的用户名

master_password=’repl’, –刚刚在主库中配置的用户名密码

master_log_file=’mysql-bin.000003’, –上面图片日志文件名

master_log_pos=818 ; –上面图片提到的游标位置

start slave;

show slave status\G查看关联



两个YES就是关联好了,

有时候当时关联好了,一会儿就又是NO。

1,主从不能同步:

show slave status;报错:Error xxx dosn’t exist

且show slave status\G:

Slave_SQL_Running: NO

Seconds_Behind_Master: NULL

解决方法:

stop slave;

set global sql_slave_skip_counter =1 ;

start slave;

之后Slave会和Master去同步 主要看:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Seconds_Behind_Master是否为0,0就是已经同步了

到此,主从mysql服务器配置完成!

测试:

在主服务器上对数据库进行修改,如:

CREAT DATABASE mydb;

在从服务器端查看:

SHOW DATABASES;

这里也将出现一个名为mydb的一模一样的数据库!

Slave_SQL_Running: No mysql同步故障解决方法

Slave_SQL_Running: No mysql同步故障解决

今天检查数据库发现一台MySQL Slave未和主机同步,查看Slave状态:

mysql> show slave status\G

Slave_IO_Running: Yes

Slave_SQL_Running: No

Last_Errno: 1062

….

Seconds_Behind_Master:NULL

原因:

1.程序可能在slave上进行了写操作

2.也可能是slave机器重起后,事务回滚造成的.

解决办法I:

1.首先停掉Slave服务:slave stop

2.到主服务器上查看主机状态:

记录File和Position对应的值。

mysql> show master status;

+——————+———–+————–+——————+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+——————+———–+————–+——————+

| mysql-bin.000020 | 135617781 | | |

+——————+———–+————–+——————+

1 row in set (0.00 sec)

3.到slave服务器上执行手动同步:

mysql> change master to

master_host=’master_ip’,

master_user=’user’,

master_password=’pwd’,

master_port=3307,

master_log_file=’mysql-bin.000020’,

master_log_pos=135617781;

1 row in set (0.00 sec)

mysql> slave start;

1 row in set (0.00 sec)

再次查看slave状态发现:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes



Seconds_Behind_Master: 0

解决办法II:

mysql> slave stop;

mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

mysql> slave start;

自己的使用体会:方法一是强制性从某一个点开始同步,会有部分没有同步的数据丢失,后续主服务器上删除记录同步也会有一些错误信息,不会影响使用.方法二不一定会有效果.

=======================================================================================]

1,主从不能同步:

show slave status;报错:Error xxx dosn’t exist

且show slave status\G:

Slave_SQL_Running: NO

Seconds_Behind_Master: NULL

解决方法:

stop slave;

set global sql_slave_skip_counter =1 ;

start slave;

之后Slave会和Master去同步 主要看:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Seconds_Behind_Master是否为0,0就是已经同步了

2,还需要做的一些优化与监视:

show full processlist; //查看mysql当前同步线程号

skip-name-resolve //跳过dns名称查询,有助于加快连接及同步的速度

max_connections=1000 //增大Mysql的连接数目,(默认100)

max_connect_errors=100 //增大Mysql的错误连接数目,(默认10)

查看日志一些命令

1, show master status\G;

在这里主要是看log-bin的文件是否相同。

show slave status\G;

在这里主要是看:

Slave_IO_Running=Yes

Slave_SQL_Running=Yes

如果都是Yes,则说明配置成功.

2,在master上输入show processlist\G;

mysql> SHOW PROCESSLIST\G

[b]*****************[/b] 1. row [b]*****************[/b]

Id: 2

User: root

Host: localhost:32931

db: NULL

Command: Binlog Dump

Time: 94

State: Has sent all binlog to slave; waiting for binlog to

be updated

Info: NULL

如果出现Command: Binlog Dump,则说明配置成功.

stop slave #停止同步

start slave #开始同步,从日志终止的位置开始更新。

SET SQL_LOG_BIN=0|1 #主机端运行,需要super权限,用来开停日志,随意开停,会造成主机从机数据不一致,造成错误

SET GLOBAL SQL_SLAVE_SKIP_COUNTER=n # 客户端运行,用来跳过几个事件,只有当同步进程出现错误而停止的时候才可以执行。

RESET MASTER #主机端运行,清除所有的日志,这条命令就是原来的FLUSH MASTER

RESET SLAVE #从机运行,清除日志同步位置标志,并重新生成master.info

虽然重新生成了master.info,但是并不起用,最好,将从机的mysql进程重启一下,

LOAD TABLE tblname FROM MASTER #从机运行,从主机端重读指定的表的数据,每次只能读取一个,受timeout时间限制,需要调整timeout时间。执行这个命令需要同步账号有 reload和super权限。以及对相应的库有select权限。如果表比较大,要增加net_read_timeout 和 net_write_timeout的值

LOAD DATA FROM MASTER #从机执行,从主机端重新读入所有的数据。执行这个命令需要同步账号有reload和super权限。以及对相应的库有select权限。如果表比较大,要增加net_read_timeout 和 net_write_timeout的值

CHANGE MASTER TO master_def_list #在线改变一些主机设置,多个用逗号间隔,比如

CHANGE MASTER TO

MASTER_HOST=’master2.mycompany.com’,

MASTER_USER=’replication’,

MASTER_PASSWORD=’bigs3cret’

MASTER_POS_WAIT() #从机运行

SHOW MASTER STATUS #主机运行,看日志导出信息

SHOW SLAVE HOSTS #主机运行,看连入的从机的情况。

SHOW SLAVE STATUS (slave)

SHOW MASTER LOGS (master)

SHOW BINLOG EVENTS [ IN ‘logname’ ] [ FROM pos ] [ LIMIT [offset,] rows ]

PURGE [MASTER] LOGS TO ‘logname’ ; PURGE [MASTER] LOGS BEFORE ‘date’
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 mysql