Mysql_主从_配置详解

俗称:AB复制
replication :把主上的日志复制到从上,然后从根据日志去执行同样的操作,以达到俩个数据库的数据一致。
A - -> change data --> bin_log - transfer --> B -->repl_log --> change data 完成的一个过程。
[root@yiqiang ~]# cd /usr/local/src
[root@yiqiang src]# ls /usr/local/mysql
[root@yiqiang src]# rm -fr /usr/local/mysql 删除之前的mysql
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 







.


1.)一台机上跑俩个mysql
 
[root@yiqiang src]# tar -zxvf mysql-5.1.73-linux-i686-glibc23.tar.gz  解压GZ格式包
[root@yiqiang src]# mv mysql-5.1.73-linux-i686-glibc23 /usr/local/mysql/
[root@yiqiang src]# grep 'mysql' /etc/passwd  查看是否有mysql账户
mysql:x:500:500::/home/mysql:/sbin/nologin
如果没有则创建 #useradd -s /sbin/nologin mysql
[root@yiqiang src]# cd /usr/local/mysql/
[root@yiqiang mysql]# ls
[root@yiqiang mysql]# cp support-files/my-small.cnf  /etc/my.cnf
[root@yiqiang mysql]# cp support-files/mysql.server  /etc/init.d/mysqld  拷贝都直接覆盖原来的文件。
[root@yiqiang mysql]# vim /etc/init.d/mysqld 编辑其地址 :wq保存退出。
basedir=/usr/local/mysql
datadir=/data/mysql

[root@yiqiang mysql]# rm -fr /data/mysql  删除之前装的这个文件,让他从新生成文件。
[root@yiqiang mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql   初始化,安装
查看:
[root@yiqiang mysql]# echo $?
0
[root@yiqiang mysql]# ls /data/mysql
mysql  test 
有这俩目录就是ok的。安装完成。
[root@yiqiang mysql]# /etc/init.d/mysqld start
[root@yiqiang mysql]# ps aux|grep mysql
[root@yiqiang mysql]# netstat -lnp|grep mysql





----------------------------------------------------------------
另一个mysql的安装:
[root@yiqiang mysql]# cd ..
[root@yiqiang local]# ls
[root@yiqiang local]# cp -r mysql mysql_slave  重新拷贝一个解压的目录,并重命名mysql_slave
[root@yiqiang local]# cd mysql_slave
[root@yiqiang mysql_slave]# ls
[root@yiqiang mysql_slave]# cp /etc/my.cnf  .   把配置文件拷贝到当前目录下
[root@yiqiang mysql_slave]# vim my.cnf         进而编辑此文件,更改如下:
找到:[mysqld]
port            = 3306
socket           = /tmp/mysql.sock
skip-locking

[mysqld]
port           = 3307
socket          = /tmp/mysql_slave.sock
datadir         = /data/mysql_slave
skip-locking

保存退出
 
[root@yiqiang mysql_slave]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql_slave  初始化
[root@yiqiang mysql_slave]# ls /data/mysql_slave/
mysql  test
检查是否有此俩目录,
[root@yiqiang mysql_slave]# cd /etc/init.d   从新写一个启动脚本
[root@yiqiang init.d]# ls
[root@yiqiang init.d]# cp mysqld mysqldslave
[root@yiqiang init.d]# vim mysqldslave  编辑启动脚本

basedir=/usr/local/mysql_slave
datadir=/data/mysql_slave

conf=$basedir/my.cnf
找到 # Try to find basedir in /etc/my.cnf      
      conf=/data/my.cnf
改成: conf=$basedir/my.cnf
:wq保存退出
[root@yiqiang init.d]# /etc/init.d/mysqldslave start
[root@yiqiang init.d]# ps aux|grep mysql
[root@yiqiang init.d]# netstat -lnp|grep mysql 
可以看到俩个端口和两个sock,表示安装成功。续而装也以此类推。
 










 

2.)设置主3306  从3307


在3306上创建一个测试的数据库。
[root@yiqiang ~]# which mysql
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
由于mysql是挪动安装的,以及是删除之前mysql目录再安装的,之前有开机启动的设置,造成登陆不了。
通用过find命令查找sock文件 # find / -name mysql.sock
通过错误日志查找原因: /data/mysql/主机名.err
通过端口查找原因 #ps aux|grep mysql   # netstat -lnp|grep mysql    或者搜索3306端口,来判断该端口谁在用 ,也有chkconfig原因
 
 
 


[root@yiqiang ~]# mysql -S /tmp/mysql.sock       3306的登陆方式。sock登陆
[root@yiqiang ~]# mysql -h127.0.0.1 -P3306         proth 登陆
[root@yiqiang ~]# mysql      因为之前做过pat.sh
 
 
 
[root@yiqiang ~]# mysql -S /tmp/mysql_slave.sock  3307的登陆  sock的登陆
[root@yiqiang ~]# mysql -h127.0.0.1 -P3307

[root@yiqiang ~]# mysql   3306默认登陆方式
mysql> create database db1; 创建库名db1
[root@yiqiang ~]# mysqldump -S /tmp/mysql.sock mysql > 123.sql  
会出现警告,直接忽视。
可以看一下,弄些数据到db1
[root@yiqiang ~]# mysql -S /tmp/mysql.sock db1 < 123.sql
[root@yiqiang ~]# 
 
登陆主 :mysql,查看库
mysql> use db1;
Database changed
mysql> show tables;
+---------------------------+
| Tables_in_db1             |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| servers                   |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
23 rows in set (0.00 sec)


mysql> 
针对
主 :db1库做实验,db1库数据为任意
----------------------------------------------------------
 
 
 
主:
 
 
 
 
 
[root@yiqiang ~]# vim /etc/my.cnf
 
 

编辑如下server-id       = 1         #主、从数值不可一样

log-bin=aming                    #db2         # 只针对db1库做同步。后面需要再加就写db2   #白名单写法

binglog-do-db=db1        # ,db2

---------------------------------------------------------------------------------------------------------------------------

binlog-ignore-db=mysql        #黑名单写法 二条一般写一个就可以了,当同步的库比较多时,除了mysql库不更新,其他都更新。

保存退出
[root@yiqiang ~]# /etc/init.d/mysqld restart
ls /data/mysql

 
 
会有显示 aming.   为前缀的4文件(主机名字不同的者俩个 )
进入mysql,新建个用户 和权限replication  和密码123123
mysql> grant replication slave on *.* to 'repl'@'127.0.0.1' identified by '123123';
mysql> flush privileges;   权限从新 刷新
mysql> flush tables with read lock;   锁定表,只允许读。 下问有解锁
mysql> show master status;  读取数据
有这三个 数值
aming.0000002     331   mysql
 
 
 
 
 
从:
从:
登陆从:
 mysql -S /tmp/mysql_slave.sock

[root@yiqiang ~]# vim /usr/local/mysql_slave/my.cnf
把server-id     = 1 改成 111   保存退出
[root@yiqiang ~]# ls
123.sql  anaconda-ks.cfg  install.log  install.log.syslog
从上也要添加 库
[root@yiqiang ~]# mysql -S /tmp/mysql_slave.sock -e "create database db1" 把主上的库导入进去
[root@yiqiang ~]# mysql -S /tmp/mysql_slave.sock db1 < 123.sql  追加此库给从,保证机器同步必须要db1一样
 
接上
从:
[root@yiqiang ~]#
 mysql -S /tmp/mysql_slave.sock
mysql> slave stop;
先把从停了,在把主上的 指定host  端口  用户  密码 
mysql>change master to master_host='127.0.0.1', master_port=3306, master_user='repl', master_password='123123', master_log_file='aming.000002', master_log_pos=106;
 
mysql> slave start;  启动从
mysql> show slave status\G;   需要查看到 有两个 
  Slave_IO_Running: Yes
 Slave_SQL_Running: Yes
 yes 值,如果没有会显示错误消息
 
主与从就做好了,下面来测试。
 
 
[root@yiqiang ~]# mysql -S /tmp/mysql_slave.sock
[root@yiqiang ~]# /etc/init.d/mysqldslave restart 重启服务器

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3.)测试主与从的链接状态
 
 
 
主:
mysql
mysql> show master status;
+--------------+----------+--------------+------------------+
| File         | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------+----------+--------------+------------------+
| aming.000003 |      106 |              | mysql            |
+--------------+----------+--------------+------------------+
1 row in set (0.00 sec)
mysql> 
 
mysql>unlock tables;  解锁
mysql> use db1;
Database changed
mysql> show tables;
+---------------------------+
| Tables_in_db1             |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| servers                   |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
23 rows in set (0.01 sec)
 
mysql> drop table help_category;   删除一个表
 
 
 
 
转到
 
从:

mysql> use db1;
Database changed
mysql> show tables;
 

就会发现(上图中)少了个表 table help_category;


继续:主

删掉一个表

mysql> drop table proc; 
 
继续:从
mysql> show tables;
就会发现少了proc 表
 
 
 
 
主:

创建一个表:
mysql> use db1;
Database changed
mysql> show create table user\G; 先查看一个表详细,用以模仿
mysql>;     #继续

mysql> CREATE TABLE `yiqiang123`(  --> `User`char  从括号出开始  粘贴  最后加上封号       #`反引号是


mysql> show tables
主、从:都可以操作
mysql> show tables;
就可以查看到表了 yiqiang123,就完成同步了。 
主从连接过程中,易中断,需要时常监听,执行如下命令:
在从上查探,执行
mysql> show slave status\G;   需要查看到 有两个  yes 值,如果没有会显示错误消息
从上不易操作,容易发生紊乱。只适合查看是否同步。
主从复制    读写分离是一个概念
如果断开了,可以尝试执行  stop slave; 然后执行 start slave; 
如果不能继续主从了,那只好重新做主从。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值