您的位置:首页 > 数据库 > MySQL

mysql主从配置

2015-07-24 16:48 537 查看
mysql主从配置

replication主从,使两个数据库数据保持一致
主A数据变化,产生日志,传送给从B,B根据日志做相应变化,使数据与A一致。从而保持A、B数据库保持一致

现实中,数据库主从在两台设备上做,现为方便和节省资源,我就在同一台上做了,在两台上做,配置类似
[root@Client ~]# ls /usr/local/
bin/ games/ lib/ sbin/ src/
etc/ include/ libexec/ share/
[root@Client ~]# rm -rf /usr/local/mysql //如果安装过数据库,先删除原先的
[root@Client ~]# cd /usr/local/src/
[root@Client src]# ls
mysql-5.1.40-linux-i686-icc-glibc23.tar.gz
[root@Client src]# tar zxvfmysql-5.1.40-linux-i686-icc-glibc23.tar.gz
[root@Client src]# mvmysql-5.1.40-linux-i686-icc-glibc23 /usr/local/mysql
[root@Client src]# grep "mysql"/etc/passwd
[root@Client src]# useradd -s /sbin/nologinmysql
[root@Client src]# cd /usr/local/mysql/
[root@Client mysql]# ls
[root@Client mysql]# cpsupport-files/my-small.cnf /etc/my.cnf
cp: overwrite `/etc/my.cnf'? y
[root@Client mysql]# vim /etc/my.cnf
[root@Client mysql]# cpsupport-files/mysql.server /etc/init.d/mysqld
[root@Client mysql]# vim /etc/init.d/mysqld
basedir=/usr/local/mysql
datadir=/data/mysql

[root@Client mysql]# rm -rf /data/mysql //如果之前安装过,存在就删除
[root@Client mysql]#./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
[root@Client mysql]# /etc/init.d/mysqldstart
[root@Client mysql]# ps aux |grep mysql
root 3694 0.0 0.1 5060 1344 pts/2 S 21:02 0:00 /bin/sh/usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql--pid-file=/data/mysql/Client.pid
mysql 3793 0.9 1.2 102904 13380 pts/2 Sl 21:02 0:00/usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql--user=mysql --log-error=/data/mysql/Client.err--pid-file=/data/mysql/Client.pid --socket=/tmp/mysql.sock --port=3306

[root@Client mysql]# netstat -lnp |grep3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 3793/mysqld
//主mysql安装成功,并启动了

现安装第二个mysql,从mysql。
[root@Client mysql]# cd ..
[root@Client local]# ls
[root@Client local]# cp -r mysqlmysql_slave
[root@Client local]# cd mysql_slave/
[root@Client mysql_slave]# cp /etc/my.cnf . //配置文件拷贝到当前目录
[root@Client mysql_slave]# pwd
/usr/local/mysql_slave
[root@Client mysql_slave]# vim my.cnf
[mysqld]
port = 3307
socket = /tmp/mysql_slave.sock
datadir = /data/mysql_slave

[root@Client mysql_slave]#./scripts/mysql_install_db --user=mysql --datadir=/data/mysql_slave
[root@Client mysql_slave]# ls/data/mysql_slave/
mysql test
[root@Client mysql_slave]# cd /etc/init.d/
[root@Client init.d]# cp mysqld mysqldslave
basedir=/usr/local/mysql_slave
datadir=/data/mysql_slave
conf=/etc/my.cnf 改成conf=$basedir/my.cnf
[root@Client init.d]#/etc/init.d/mysqldslave start
[root@Client init.d]# ps aux |grep mysql
[root@Client init.d]# netstat -lnp |grepmysql
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 3793/mysqld
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 4105/mysqld
//两个mysql都已启动

现在配置主从,主3306,从3307
[root@Client init.d]# cd
[root@Client ~]# mysql //如无该命令可用/usr/local/mysql/bin/mysql
-bash: mysql: command not found
[root@Client ~]# /usr/local/mysql/bin/mysql
mysql> quit
Bye
[root@Client ~]# vim /etc/profile.d/path
export PATH=$PATH:/usr/local/mysql/bin
[root@Client ~]# source !$
source /etc/profile.d/path

[root@Client ~]# mysql //默认登入3306的
mysql> quit
[root@Client ~]# mysql -S /tmp/mysql.sock //登入3306的
mysql> quit
[root@Client ~]# mysql -S /tmp/mysql_slave.sock //登入3307的
mysql> quit
[root@Client ~]# mysql -h127.0.0.1 -P3307 //登入指定监听端口的

[root@Client ~]# mysql //登入主的
mysql> create database db1; //创建一个表
mysql> quit
[root@Client ~]# mysqldump -S/tmp/mysql.sock mysql>123.sql //拷贝一个库到文件
[root@Client ~]# vim 123.sql //查看
[root@Client ~]# mysql -S /tmp/mysql.sockdb1 <123.sql //将文件拷贝到库
[root@Client ~]# mysql
mysql> use db1;
mysql> show tables; //库已拷贝
mysql> quit

[root@Client ~]# vim /etc/my.cnf
server-id = 1 //确保与从上server-id不同
log-bin=wang //自定义log-bin
#binlog-do-db=db1,db2 //只针对db1,db2做主从(去掉注释生效)
#binlog-ignore-db=mysql //无需做主从的库(去掉注释生效)

[root@Client ~]# /etc/init.d/mysqld restart
[root@Client ~]# ls /data/mysql
wang.index wang.000001 // log-bin文件
[root@Client ~]# mysql
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; //查看
+-------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB |Binlog_Ignore_DB |
+-------------+----------+--------------+------------------+
| wang.000001| 315| | |
+-------------+----------+--------------+------------------+
从上:
[root@Client ~]# vim /usr/local/mysql_slave/my.cnf
server-id = 111 //设置成与主不同
[root@Client ~]# ls
123.sql
[root@Client ~]# mysql -S/tmp/mysql_slave.sock -e "create database db1";
//从上创建库db1
[root@Client ~]# mysql -S/tmp/mysql_slave.sock db1 <123.sql;
//导入库
[root@Client ~]# mysql -S/tmp/mysql_slave.sock //登入从
mysql> slave stop;
mysql> change master to master_host='127.0.0.1',master_port=3306, master_user='repl', master_password='123123',master_log_file='wang.000001', master_log_pos=315;

// master_log_file='wang.000001',master_log_pos=315;值为mysql> show master status;中看到的

mysql> slave start;
mysql> show slave status\G;
Slave_IO_Running: No
Slave_SQL_Running: Yes
//两项值都为Yes表示配置成功,现配置还未正确

mysql> slave stop;
[root@Client ~]# /etc/init.d/mysqldslaverestart
[root@Client ~]# mysql -S/tmp/mysql_slave.sock
mysql> slave start;
mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
//两项都为yes.配置成功了

验证测试:
主上
[root@Client ~]# mysql
mysql> unlock tables;
mysql> use db1;
mysql> show tables;
help_category
mysql> drop table help_category; //删除该表

[root@Client ~]# mysql -S/tmp/mysql_slave.sock
mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
mysql> use db1;
mysql> show tables;
无help_category表,主上删除后,从上同步

注意:主从机制不能在从上做操作

主上:
mysql> drop database db1;
mysql> show database;

从上:
mysql> show databases;
db1也被删除

实际现实中,主从很容易出现故障,可监控两个yes的值,判读主从是否正常
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql主从配置