写得不是很好,希望大家多多吐槽 >__<
mysql主从总结
一、原理
(1)流程
A --- change data ---> 记录bin_log ---> transfer(传到) ----> B ---> repl_log(记录自己的从日志repl_log) ----> change data(更改自己的数据)
(2)说明
主mysql进行操作(create,update,insert,delete。。。),记录二进制log文件(bin_log )
然后把日志推到从上去,从接收到主日志后,修改自己的 replay_log
二、实验、一台机器跑两个mysql服务
(i)准备工作
一、安装主mysql
主(master):3306 mysql
从(slave) :3307 mysql_slave
(1)删除原来已安装的mysql
rm -rf /usr/local/mysql
rm -rf /data/mysql
(2)安装主mysql
解压: tar zxvf mysql-5.1.49-linux-i686-glibc23.tar.gz
移动: mv mysql-5.1.49-linux-i686-glibc23 /usr/local/mysql
(3)检查有没有mysql用户
grep ‘mysql‘ /etc/passwd (没有则创建: useradd -s /sbin/nologin mysql )
(4)拷贝配置文件,启动脚本
cd /usr/local/mysql
cp support-files/my-small.cnf /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
编辑 mysqld
basedir=/usr/local/mysql
datadir=/data/mysql
(5)初始化(之后会在 /data/mysql 下有 2 个目录mysql, test)
./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
(6)启动主mysql
/etc/init.d/mysqld start
二、安装从mysql
(0)复制mysql解压目录到从上
cp -r /usr/local/mysql /usr/local/mysql_slave
(1)复制主的配置文件
cp /etc/my.cnf /usr/local/mysql_slave/
(2)修改从配置文件:vim my.cnf
port=3307
socket=/tmp/mysql_slave.sock
datadir=/data/mysql_slave
(3)初始化操作
./scripts/mysql_install_db --user=mysql --datadir=/data/mysql_slave
(4)修改从启动脚本
cp /etc/init.d/mysqld /etc/init.d/mysqldslave
修改:
basedir=/usr/local/mysql_slave
datadir=/data/mysql_slave
conf=$basedir/my.cnf (2个地方,#Try to find basedir in /etc/my.cnf 也需要改)
(5)保存启动从
/etc/init.d/mysqldslave start
科普:
登录mysql的2种方式
(1)host+端口
mysql -h127.0.0.1 -P3306 (主)
mysql -h127.0.0.1 -P3307 (从)
(2)socket
mysql -S /tmp/mysql.sock(主)
mysql -S /tmp/mysql_slave.sock(从)
ps:直接mysql是登录主
(ii)主从配置
一、主mysql创建测试数据库并导入数据
(1)登录主,创建测试数据库db1
mysql ——》 create database db1;
(2)导出主mysql库的数据给db1
mysqldump -S /tmp/mysql.sock mysql > 123.sql
mysql -S /tmp/mysql.sock db1 < 123.sql
二、配置主
(1)修改配置文件vim /etc/my.cnf
(a)server-id=1
(b)log-bin=windysai (名字随便)
(c)可选参数
binlog-ignore-db=mysql (不同步mysql库)
(binlog-do-db=db1,db2:只针对db1,db2做主从)
(2)重启主mysql
/etc/init.d/mysqld restart
(ls /data/mysql 会生成bin_log——2个文件:windysai.000001,windysai.index)
(3)进入主mysql,授权传输bin_log的repl
(a)登录主 mysql
(b)grant replication slave on *.* to ‘repl‘@‘127.0.0.1‘ identified by ‘123456‘;
(4)把表的读锁死
flush tables with read lock;
(5)show master status; (记下File 和 Position的值)
三、配置从
(1)vim /usr/local/mysql_slave/my.cnf (ps:不在/etc/init.d/目录下)
(a)server-id = 111 (和主要不同!)
(b)可选参数
replicate-do-db=db1,db2
replicate-ignore-db=mysql
(2)拷贝主上的库db1(保证主从的库是一样的)
(a)mysql -S /tmp/mysql_slave.sock -e "create database db1"
(b)mysql -S /tmp/mysql_slave.sock db1 <123.sql
(iii)实现同步并测试
一、从mysql设置
(1)登录从
mysql -S /tmp/mysql_slave.sock
(2)关闭从:slave stop
(3)change master to master_host=‘127.0.0.1‘, master_port=3306, master_user=‘repl‘, master_password=‘123123‘, master_log_file="jiayi.000001‘, master_log_pos=106;
(4)重启从mysql
/etc/init.d/mysqldslave restart
(5)重新登录从mysql
(6)开启从: slave start
(7)查看状态
show slave status\G; (2个yes)
(iv)测试主从
一、主mysql登录: mysql
(1)主mysql 解锁表的读read lock
unlock tables;
(2)删除 db1 的某些表
use db1; show tables;
drop tables help_category;
二、从登录: mysql -S /tmp/mysql_slave.sock -P3307
(1)查看db1库的tables,发现 没有 help_category
use db1;
show tables;
(2)从把db1库的proc表删除
drop table proc; (主上看没有了proc)
(3)从创建表jiayilinux
show create table `jiayilinux` ....
(参考 show create table user\G;)
(4)删除整个数据库db1
drop database db1;
(v)总结
Mysql的主从机制比较脆弱,谨慎操作。
如果重启主的mysql,务必把从停掉(slave stop)
然后再重启主mysql服务,从再开启(slave start)
否则有可能会中断