首页 > 代码库 > 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主从配置