mysql主从配置

查看mysql版本mysql

mysql -Vsql


192.168.60.166 主数据库

192.168.60.167 从vim

1.首先安装mysql服务器

apt-get install mysql-server网络


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

vim /etc/mysql/my.cnf函数

把下面2行注释去掉测试

server-id = 1ui

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秒)

相关文章
相关标签/搜索