首页 > 代码库 > mysql主从配置

mysql主从配置

查看mysql版本

mysql -V


192.168.60.166 主

192.168.60.167 从

1.首先安装mysql

apt-get install mysql-server


2.修改主服务器的配置文件/etc/mysql/my.cnf

vim /etc/mysql/my.cnf

把下面2行注释去掉

server-id = 1

log_bin                 = /var/log/mysql/mysql-bin.log

bind-address           = 192.168.60.166


service mysql stop

service mysql start

mysql -uroot -p #登录管理mysql

GRANT REPLICATION SLAVE ON *.* to ‘root‘@‘192.168.60.167‘ identified by ‘123456‘;

#授权给从数据库服务器192.168.60.167


GRANT ALL ON *.* TO ‘root‘@‘192.168.60.86‘ IDENTIFIED BY ‘123456‘;

flush privileges;

#允许远程连接MYSQL


show master status; #查询主数据库状态

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000003 |      106 |              |                  |

+------------------+----------+--------------+------------------+

1 row in set (0.00 sec)


记录下 FILE 及 Position 的值,在后面进行从服务器操作的时候需要用到。

xf是如下

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000001 |      106 |              |                  |

+------------------+----------+--------------+------------------+


3.配置从服务器

修改从服务器的配置文件/etc/mysql/my.cnf

vim /etc/mysql/my.cnf

将 server-id = 1修改为 server-id = 10,并确保这个ID没有被别的MySQL服务所使用。

bind-address           = 192.168.1.153

service mysql stop

service mysql start

mysql -uroot -p


change master to

master_host=‘192.168.1.156‘,

master_user=‘rep1‘,

master_password=‘ylmf‘,

master_log_file=‘mysql-bin.000005‘,

master_log_pos=242;

xf如下

mysql> change master to

master_host=‘192.168.60.166‘,

master_user=‘root‘,

master_password=‘123456‘,

master_log_file=‘mysql-bin.000001‘,

master_log_pos=106;


正确执行后启动Slave同步进程


mysql> START SLAVE; #主从同步检查

show slave status;

其中Slave_IO_Running 与 Slave_SQL_Running 的值都必须为YES,才表明状态正常。


GRANT ALL ON *.* TO ‘root‘@‘192.168.60.86‘ IDENTIFIED BY ‘123456‘;

flush privileges;

#允许远程连接MYSQL


如果主服务器已经存在应用数据,则在进行主从复制时,需要做以下处理:

(1)主数据库进行锁表操作,不让数据再进行写入动作

FLUSH TABLES WITH READ LOCK;


(2)查看主数据库状态

show master status;


(3)记录下 FILE 及 Position 的值。

将主服务器的数据文件(整个/opt/mysql/data目录)复制到从服务器,建议通过tar归档压缩后再传到从服务器解压。

(4)取消主数据库锁定

mysql> UNLOCK TABLES;


4.验证主从复制效果

在主服务器上创建数据库first_db

create database first_db;


在主服务器上创建表first_tb

create table first_tb(id int(3),name char(10));


在主服务器上的表first_tb中插入记录

insert into first_tb values (001,‘myself‘);


在从服务器上查看,所有记录已复制过来

由此,整个MySQL主从复制的过程就完成了.


##############################################

5.MYSQL读写分离Amoeba方式 xf

(MySQL-Proxy方式脚本配置比较复杂,不容易扩展)

jdk1.5以上

主服务器:192.168.60.166

从服务器:192.168.60.167

MySQL-Proxy调度服务器:192.168.60.168


配置参考:Amoeba搞定mysql主从读写分离.htm


Amoeba下载地址

http://ncu.dl.sourceforge.net/sourceforge/amoeba/


9. 测试读写分离效果

为了清晰的看到读写分离的效果,需要暂时关闭MySQL主从复制功能

登陆从数据库服务器192.168.60.167 (从),通过命令行登录管理MySQL服务器

mysql -u root -pylmf 

stop slave;

连接MySQL-Proxy

mysql -uroot -p123456 -P3307 -h192.168.60.168

mysql -uroot -p123456 -h192.168.60.168 -P8066

登陆成功后,在first_db数据的first_tb表中插入两条记录

use first_db;

insert into first_tb values (007,‘first‘);

insert into first_tb values (008,‘second‘);

quit


分别登陆到主从数据库服务器,对比记录信息,首先,检查主数据库服务器

登录到192.168.1.156主数据库服务器

use first_db;

select * from first_tb;


然后,检查从数据库服务器

登录到192.168.1.153从数据库服务器

use first_db;

select * from first_tb;

没有新记录存在



由此,我们已经实现了MySQL读写分离,目前所有的写操作都全部在Master主服务器上,

另外,所有的读操作都分摊给了其它各个Slave从服务器上,用来分担数据库压力。


 


调整服务脚本,重启mysqld服务

    通过修改start()函数的执行语句,可以调控mysqld服务的启动选项。例如:

--log-slave-updates=1              #//记录从库更新,以便允许链式复制

--read-only                        #//将从库设为只读,仅允许从服务器线程或具有SUPER权限的用户执行

--relay-log=mysqld-relay-bin       #//使用固定的中继日志文件

--report-host=server205            #//报告给主服务器的主机名或IP地址

--slave_compressed_protocol=1      #//复制过程启用压缩,若启用此项,主、从服务器都应该添加

--replicate-do-db=mysql            #//仅复制指定的库,其他库将被忽略,此选项可设置多条(省略时复制所有库)

--replicate-do-db=mytestdb

--replicate-ignore-db=test         #//不复制(忽略)指定的库,此选项也可以设置多条,do和ignore用其中一种就可以了

--skip-slave-start                 #//服务器启动时跳过复制,需要手动 SLAVE START

--slave-net-timeout=60             #//当从服务器网络中断时,再次重试之前等待的时间(默认为60秒)

--master-connect-retry=60          #//当主服务器连接丢失时,再次重试之前等待的时间(默认为60秒)


本文出自 “XFICC” 博客,请务必保留此出处http://xficc.blog.51cto.com/1189288/1562168

mysql主从配置