设为首页 收藏本站
查看: 974|回复: 0

[经验分享] mysql一键编译安装脚本,MySQL 主主实施部署,及读写分离

[复制链接]

尚未签到

发表于 2018-9-28 13:37:47 | 显示全部楼层 |阅读模式
  相关学习:***/demo_c152_i21826.html
  环境:centos6.4+mysql-5.5.37                     mysql5.5以后都用cmake编译,需要安装cmake
  因为mysql环境包蛮多,我们需要指定yum源。用163或官方yum源也是可以的
  安装目录:/usr/local/mysql/
  数据目录:/data/mysql/data/
  二进制日志:/data/msyql/binlog/
  relay日志:/data/mysql/relaylog/
  配置文件:/data/mysql/my.cnf
  mysql.sock文件:/data/mysql/mysql.sock
  1、将cmake和mysql源码包弄到 /data/soft 目录内,配置好yum源
  cmake下载地址    http://www.cmake.org/files/v2.8/cmake-2.8.12.2.tar.gz
  mysql下载地址    ftp://mirror.switch.ch/mirror/my ... mysql-5.5.37.tar.gz
#!/bin/bash  
#时间:2014-5-4
  
#指定源码包目录、mysql数据目录、mysql安装目录
  
MYSQL_DIR="/data/soft"
  
DATA_DIR="/data/mysql/data"
  
BASE_DIR="/usr/local/mysql"
  

  
echo "please input mysql version:"
  
read VERSION
  
echo “"Your mysql version is mysql-$VERSION.tar.gz"
  

  
if [ -e "$MYSQL_DIR/mysql-$VERSION.tar.gz" ]
  
then
  
echo "Please waitting"
  
sleep 3
  
#Install mysql package dependent.
  
yum -y install gcc gcc-c++ gcc-g77 autoconf openssl zlib* fiex* libxml* ncurses-devel libmcrypt* libtool-ltdl-devel* &&
  
#Install cmake
  
echo "The system is be install cmakemplease waitting..."
  
sleep 3
  
tar -zxvf $MYSQL_DIR/cmake-2.8.12.2.tar.gz -C $MYSQL_DIR &&
  
cd $MYSQL_DIR/cmake-2.8.12.2 &&
  
./configure --prefix=/usr/local/cmake && make && make install &&
  
#creating mysql account and group
  
/usr/sbin/groupadd mysql &&
  
/usr/sbin/useradd -s /sbin/nologin -g mysql -M mysql &&
  
#Install mysql.
  
tar -zxvf $MYSQL_DIR/mysql-$VERSION.tar.gz -C $MYSQL_DIR
  
cd $MYSQL_DIR/mysql-$VERSION
  
echo "PATH=$PATH:/usr/local/cmake/bin" >> /etc/profile && source /etc/profile
  
#编译mysql,可以按自己需求编译
  
cmake $MYSQL_DIR/mysql-$VERSION
  
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql
  
-DYSQL_TCP_PORT=3306
  
-DMYSQL_DATADIR=$DATA_DIR
  
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock
  
-DWITH_MYISAM_STORAGE_ENGING=1
  
-DWITH_INNOBASE_STORAGE_ENGINE=1
  
-DDEFAULT_CHARSET=utf8
  
-DDEFAULT_COLLATION=utf8_general_ci
  
-DEXTRA_CHARSETS=all
  
-DWITH_DEBUG=0
  
make && make install &&
  

  
mkdir -p $DATA_DIR
  
mkdir -p `dirname $DATA_DIR`/binlog
  
mkdir -p `dirname $DATA_DIR`/relaylog
  
cp $MYSQL_DIR/mysql-$VERSION/support-files/my-small.cnf.sh `dirname $DATA_DIR`/my.cnf
  
cp $MYSQL_DIR/mysql-$VERSION/support-files/mysql.server.sh /etc/init.d/mysqld
  
chmod +x /etc/init.d/mysqld
  
sed -i 's/^basedir=/basedir=\/usr\/local\/mysql/' /etc/init.d/mysqld
  
sed -i 's/^datadir=/datadir=\/data\/mysql\/data/' /etc/init.d/mysqld
  
sed -i 's/`@HOSTNAME@`/lqx.com/' /etc/init.d/mysqld
  
#初始化mysql
  
sh /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=$DATA_DIR  &&
  
/etc/init.d/mysqld start
  
else
  
echo "Your input mysql version  is not in $MYSQL_DIR"
  
fi
  执行脚本一键安装mysql
  sh mysql_install.sh
  最后进行检验
  mysql -u root -p
mysql 数据库自动备份
[root@client100 ~]# vim backup.sh  
# 备份脚本如下:
  

  
#! /bin/bash
  

  
# 进入mysqldump命令目录
  
cd /usr/bin/
  

  
# 设置备份的时间,备份信息存放文件,备份路径,压缩路径,备份的用户,密码,主机,端口,数据库
  
DD=`date +%y-%m-%d==%H:%M:%S`
  
LOGFILE=/var/lib/mysql/mysqlbackup.log
  
backup_dir=/var/lib/mysql/dbbackup/
  
zip_dir=/var/lib/mysql/zipdir/
  
dbusername=backup
  
dbpassword=kongzhong
  
host=127.0.0.1
  
port=3306
  
# port2=3307
  
database1=login
  
# database2=
  
# database3=
  

  
# 指定生成备份的文件名,压缩后的文件名
  
DumpFile="$database1"$(date +%y%m%d).dump
  
NewFile="$database1"$(date +%y%m%d).tgz
  

  
# 查看备份的目录是否存在,不存在建立,并修改为mysql权限,并将相应输出信息写入日志文件
  
echo "check directory..." >> $LOGFILE
  
if [ ! -d $backup_dir ] ;then
  
  mkdir -p $backup_dir
  
  chown mysql:mysql $backup_dir
  
fi
  
echo $DD " backup start..." >> $LOGFILE
  
echo $DD >>$LOGFILE
  
echo "backup "$database1" ..." >> $LOGFILE
  

  
# 备份数据库
  
./mysqldump -h$host -P$port -u$dbusername -p$dbpassword  $database1 > $backup_dir$DumpFile
  

  
# 进入数据备份目录,压缩备份的文件,压缩完后删除dump文件
  
cd $backup_dir
  
tar czvf $NewFile $DumpFile >> $LOGFILE 2>&1
  
rm -rf $DumpFile
  

  
# 判断压缩存放目录是否存在,不存在,建立,修改权限,并将压缩过的备份文件移送到压缩目录
  
echo "moving zipfiles ..." >> $LOGFILE
  
cd $backup_dir
  
if [ ! -d $zip_dir ] ;then
  
  mkdir -p $zip_dir
  
  chown mysql:mysql $zip_dir
  
fi
  
mv *.tgz  $zip_dir
  

  
# 删除3天前的备份
  
#remove before 3 days
  
echo "remove before 3 days..." >> $LOGFILE
  
find $zip_dir -type f -mtime +3 -exec rm -f {} \;
  
echo "remove before 3 days OK" >>$LOGFILE
  

  
echo "backup over" >> $LOGFILE
  

  

  
2.给备份文件执行的权限
  
[root@client100 ~]# chmod +x backup.sh
  
3.先执行脚本测试,是否报错
  
[root@client100 ~]# ./backup.sh
  
4.如果测试正常,切换到mysql用户目录下,建立计划任务(假设每天凌晨3点备份)
  
[root@client100 ~]# su - mysql
  
# 下面就是建立计划任务(分 时 日 月 周 执行脚本的路径文件名)
  
[mysql@client100 ~]#crontab -e
  
0 3 * * * ./tmp/backup.sh
  
# 如果计划任务建好后,使用下面命令可以看到
  
[mysql@client100 ~]#crontab -l
  远程连接mysql授权方法
  在使用下面命令
  mysql -u root -p -h 192.168.100.210 -P3306
  #其中后边的 -P(大写) 用来指定远程主机mysql绑定端口,默认都是3306, -h 用来指定远程主机的IP.
  出现以下错误:
  ERROR 1130: Host '192.168.100.210' is not allowed to connect to this MySQL server
  解决方法:
  可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%"
DSC0000.jpg

  结果出现如下错误:
  ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY'
  然后查看下数据库中host的信息如下:
DSC0001.jpg

  host已经有了%这个值,所以直接运行命令:
  flush privileges;
DSC0002.jpg

  下面就可以连接了。
  使用了远程连接后在本地mysql服务器就不能管理root用户了,只能是匿名用户,要改变按照下面的步骤:
  先在远程连接到mysql服务器
  mysql> use mysql;
  mysql> update user set host='localhost'where user='root';
  mysql> select host from user where user='root';    #查看下host文件,发现原先的%已经变成localhost了
  mysql> flush privileges;                   #这个命令是一定要输入的,不然不会生效
  下面只能在mysql本地服务器用mysql -p 连接了。
  
  使用mysql客户端工具远程管理mysql服务器
  

  •   把mysql服务器设置成开启远程连接
      mysql> use mysql;
      mysql> update user set host='%'where user='rot';
      mysql> select host from user where user='root';
      mysql> flush privileges;
  •   测试下是否成功
  在本地测试:
  mysql -u root -p -h 192.168.100.210 -P330
  3.下载windows下远程连接工具
  http://www.3000f.com/upload_files/soft/HeidiSQL%207.0.rar
  打开这个软件后按照下面的图输入地址,把认证提示勾上就是在稍候弹出的认证框中输入密码。
DSC0003.jpg

  将这个工具配置mysql.exe使用更加方便
  打开工具----首选项---其它选项---看到mysql命令行程序这行,选择你mysql.exe放的目录,我放在c盘下,直接指定目录即可。
DSC0004.jpg

  添加完后,选择工具-----运行命令行,就可以用命令管理mysql服务器
  mysql.exe下载地址:
  http://c.gupuxiazai.com/c5/2013-4/mysql_41113.rar
  shell实现自动恢复mysql主从错误
#!/bin/sh  
# check_mysql_slave status
  
ip=eth0
  
mysql_command=/application/mysql/bin/mysql
  
mysql_user=root
  
mysql_pass=123456
  
mysql_sockfile=/data/3306/mysql.sock
  
datetime=`date +"%Y-%m-%d_%H:%M:%S"`
  
mysql_slave_logfile=/server/script/logs/check_mysql_slave.log
  
slave_ip=`ifconfig $ip|grep "inet addr" | awk -F[:" "]+ '{print $4}'`
  
#status=$($mysql_command -u$mysql_user -p$mysql_pass -S $mysql_sockfile -e "show slave status\G" | grep -i "running")
  
Slave_IO_Running=`grep Slave_IO_Running $mysql_slave_logfile| awk ' {print $2}'`
  
Slave_SQL_Running=`grep Slave_SQL_Running $mysql_slave_logfile | awk '{print $2}'`
  
if [ "$Slave_IO_Running" = "Yes" -a "$Slave_SQL_Running" = "Yes" ]
  
then
  
        echo "Slave is Running!"
  
        else
  
        echo " $datetime $slave_ip Slave is not running!" >> $mysql_slave_logfile
  
cat | $mysql_command -u$mysql_user -p$mysql_pass -S $mysql_sockfile  grant replication slave on *.* to 'admin'@'172.16.%.%' identified by '123456';
  
刷新数据使其生效
  
mysql> flush privileges;
  至此我们mysql的Master设置完成.
  Slave:安装环境配置:
创建mysql数据库目录  
# mkdir /mydata/data –pv
  
创建mysql用户
  
# useradd -r mysql
  
修改数据目录权限
  
# chown -R mysql.mysql /mydata/data/
  
使用mysql-5.5通用二进制包安装mysql
  
解压mysql软件包
  
# tar xf mysql-5.6.12-linux-glibc2.5-x86_64.tar.gz -C /usr/local
  
创建连接,便于查看mysql的版本等信息
  
# cd /usr/local/
  
# ln -sv mysql-5.6.12-linux-glibc2.5-x86_64/ mysql
  
修改mysql属主属组
  
# cd mysql
  
# chown -R root.mysql ./*
  
# yum -y install libaio
  
初始化mysql数据库
  
# scripts/mysql_install_db --user=mysql--datadir=/mydata/data/
  
提供mysql配置文件
  
# cp support-files/my-default.cnf /etc/my.cnf
  
提供服务脚本
  
# cp support-files/mysql.server /etc/init.d/mysqld
  
添加至服务列表
  
# chkconfig --add mysqld
  
编辑配置文件
  
# vim /etc/my.cnf
  
# The MySQL server
  
#log-bin=mysql-bin      禁用二进制日志,从服务器不需要二进制日志文件
  
datadir = /mydata/data  mysql的数据目录
  
relay-log = relay-log   设置中继日志
  
relay-log-index = relay-log.index  中继日志索引
  
innodb_file_per_table = 1
  
server-id       = 2    id不要和主服务器的一样
  
设置环境变量
  
# vim/etc/profile.d/mysql.sh
  
export PATH=$PATH:/usr/local/mysql/bin
  
执行此脚本(导出环境变量)
  
# . /etc/profile.d/mysql.sh
  
启动服务
  
# service mysqld start
  到这slave服务的mysql安装和配置完成,下面启动slave复制吧,开启之前先查看下从服务上的二进制文件吧
mysql> show master status; #在Master上执行查看二进制文件  
在从服务器上开启复制功能
  
change master to master_host='172.16.7.1',master_user='admin',master_password='123456',master_log_file='master-bin.000001',master_log_pos=407;
  
开启复制功能
  
mysql>start slave;
  至此我们的mysql服务器的主从复制架构已经基本完成,下面开启服务并测试测试吧~
  在从服务器开启复制进程:mysql>start slave;
mysql> start slave;  
mysql> show slave status\G
  至此我们mysql服务器的主从复制架构已经完成,但是我们现在的主从架构并不完善,因为我们的从服务上还可以进行数据库的写入操作,一旦用户把数据写入到从服务器的数据库内,然后从服务器从主服务器上同步数据库的时候,会造成数据的错乱,从而会造成数据的损坏,所以我们需要把从服务器设置成只读~方法如下:
  注意:read-only = ON ,这项功能只对非管理员组以为的用户有效!
  编辑从服务器配置文件my.cnf
vim /etc/my.cnf  
read-only = ON   增加这行内容

  service mysqld>  此致我们的mysql基于主从架构的复制功能已经搭建全部完成.
  由于二进制文件的缓冲区内,当我们的服务器宕机的时候,缓存区内的数据并没有同步到二进制日志文件内的时候,那就悲剧了,缓冲区内的数据就无法找回了,为了防止这种情况的发送,我们通过设置mysql直接把二进制文件记录到二进制文件而不再缓冲区内停留。
  sync-binlog = ON 在主服务器上进行设置,用于事务安全
  从上面我们可以看到从服务器启动的时候其Slave_IO_Running: Yes和Slave_SQL_Running: Yes是自动启动的,但是有时候我们在主服务上进行的误操作等,也会直接同步到从服务器上的,要想恢复那就难了,所以我们需要关闭其自动执行功能,让其能够停止,skip-slave-start = 1 ,让其不开启自动同步,但是遗憾的是mysql5.28上已经没有了,我们可以通过停止相关线程来实现:
  mysql>STOP SLAVE 或STOP SLAVE  IO_THREAF或STOP SLAVE SQL_THREAD
  注意:从服务器的所有操作日志都会被记录到数据目录下的错误日志中!
  二:MySQL的半同步复制
  可以参考:http://jishuweiwang.blog.51cto.com/6977090/1421441
  实现半同步复制的功能很简单,只需在mysql的主服务器和从服务器上安装个google提供的插件即可实现,
  主服务上使用semisync_master.,从服务器上使用sosemisync_slave.so插件即可实现,插件在mysql通用二进制的mysql/lib/plugin目录内。
  其配置步骤如下
  1.在master和slave 查询数据库是否支持动态添加插件
mysql> select @@have_dynamic_loading ;  
+------------------------+
  
| @@have_dynamic_loading |
  
+------------------------+
  
| YES                    |
  
+------------------------+
  
1 row in set (0.00 sec)
  
#YES表示支持。  从库查询此处略过.
  2. 在master和slave分别查看目前mysql状态有没有启用半同步
mysql>  show variables like 'rpl%';  
+-------------------+-------+
  
| Variable_name     | Value |
  
+-------------------+-------+
  
| rpl_recovery_rank | 0     |
  
+-------------------+-------+
  
1 row in set (0.00 sec)
  
# Value为0表示目前 未启用.  #从库操作也是这样,此处略过.
  3. 在master和slave上,分别安装半同步插件
# master端  
mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
  
Query OK, 0 rows affected (0.05 sec)
  

  
# slave端
  
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
  
Query OK, 0 rows affected (0.03 sec)
  4. 在master端启用半同步
#未启动前状态查看  
mysql> show variables like 'rpl%';
  
+------------------------------------+-------+
  
| Variable_name                      | Value |
  
+------------------------------------+-------+
  
| rpl_recovery_rank                  | 0     |
  
| rpl_semi_sync_master_enabled       | OFF   |
  
| rpl_semi_sync_master_timeout       | 10000 |
  
| rpl_semi_sync_master_trace_level   | 32    |
  
| rpl_semi_sync_master_wait_no_slave | ON    |
  
+------------------------------------+-------+
  
5 rows in set (0.00 sec)
  
# 启动, 并查看启动结果
  
mysql>  set global rpl_semi_sync_master_enabled=1;
  
Query OK, 0 rows affected (0.00 sec)
  

  
mysql>  show variables like 'rpl%';
  
+------------------------------------+-------+
  
| Variable_name                      | Value |
  
+------------------------------------+-------+
  
| rpl_recovery_rank                  | 0     |
  
| rpl_semi_sync_master_enabled       | ON    |
  
| rpl_semi_sync_master_timeout       | 10000 |
  
| rpl_semi_sync_master_trace_level   | 32    |
  
| rpl_semi_sync_master_wait_no_slave | ON    |
  
+------------------------------------+-------+
  
5 rows in set (0.00 sec)
  
# rpl_semi_sync_master_timeout 默认为10000,单位是毫秒,可以根据实际环境修改
  
# 修改命令为:set global rpl_semi_sync_master_timeout=1000;
  
# 发现 rpl_semi_sync_master_enabled --> Value: ON,表示启用“主”角色的半同步插件
  5. 在slave端启用半同步
# 未启动前状态  
mysql> show variables like 'rpl%';
  
+---------------------------------+-------+
  
| Variable_name                   | Value |
  
+---------------------------------+-------+
  
| rpl_recovery_rank               | 0     |
  
| rpl_semi_sync_slave_enabled     | OFF   |
  
| rpl_semi_sync_slave_trace_level | 32    |
  
+---------------------------------+-------+
  
3 rows in set (0.00 sec)
  
# 启动,并查看执行结果
  
mysql> set global rpl_semi_sync_slave_enabled=1;
  
Query OK, 0 rows affected (0.00 sec)
  

  
mysql> show variables like 'rpl%';
  
+---------------------------------+-------+
  
| Variable_name                   | Value |
  
+---------------------------------+-------+
  
| rpl_recovery_rank               | 0     |
  
| rpl_semi_sync_slave_enabled     | ON    |
  
| rpl_semi_sync_slave_trace_level | 32    |
  
+---------------------------------+-------+
  
3 rows in set (0.00 sec)
  
# 发现 rpl_semi_sync_slave_enabled --> Value: ON,表示启用“从”角色的半同步插件.但是此时
  
# 仅仅是启用,并未在当前运行状态激活. 所以还需要执行下面的步骤.
  

  
# 步骤1:
  
# 此时查看运行状态
  
mysql> show status like 'rpl%';
  
+----------------------------+-------------+
  
| Variable_name              | Value       |
  
+----------------------------+-------------+
  
| Rpl_semi_sync_slave_status | OFF         |
  
| Rpl_status                 | AUTH_MASTER |
  
+----------------------------+-------------+ #发现为OFF状态.
  
2 rows in set (0.00 sec)
  
# 步骤2:激活半同步--> 也就是restart  io线程
  
mysql> stop slave io_thread;
  
Query OK, 0 rows affected (0.00 sec)
  

  
mysql> start slave io_thread;
  
Query OK, 0 rows affected (0.00 sec)
  

  
mysql> show status like 'rpl%';
  
+----------------------------+-------------+
  
| Variable_name              | Value       |
  
+----------------------------+-------------+
  
| Rpl_semi_sync_slave_status | ON          |
  
| Rpl_status                 | AUTH_MASTER |
  
+----------------------------+-------------+
  
2 rows in set (0.00 sec)
  
# 发现Rpl_semi_sync_slave_status Value为ON。
  #到此,MySQL半同步部署完成. 此时可以到master端查看运行状态了。
mysql> show status like 'rpl%';  
+--------------------------------------------+-------+
  
| Variable_name                              | Value |
  
+--------------------------------------------+-------+
  
| Rpl_semi_sync_master_clients               | 1     |
  
| Rpl_semi_sync_master_net_avg_wait_time     | 0     |
  
| Rpl_semi_sync_master_net_wait_time         | 0     |
  
| Rpl_semi_sync_master_net_waits             | 0     |
  
| Rpl_semi_sync_master_no_times              | 0     |
  
| Rpl_semi_sync_master_no_tx                 | 0     |
  
| Rpl_semi_sync_master_status                | ON    |
  
| Rpl_semi_sync_master_timefunc_failures     | 0     |
  
| Rpl_semi_sync_master_tx_avg_wait_time      | 0     |
  
| Rpl_semi_sync_master_tx_wait_time          | 0     |
  
| Rpl_semi_sync_master_tx_waits              | 0     |
  
| Rpl_semi_sync_master_wait_pos_backtraverse | 0     |
  
| Rpl_semi_sync_master_wait_sessions         | 0     |
  
| Rpl_semi_sync_master_yes_tx                | 0     |
  
+--------------------------------------------+-------+
  
14 rows in set (0.02 sec)
  
# 关键看Rpl_semi_sync_master_status
  上面的设置时在mysql进程内动态设定了,会立即生效但是重启服务以后就会失效,为了保证永久有效,需要把相关配置写到主、从服务器的配置文件my.cnf内:
Master上:  
[mysqld]
  
rpl_semi_sync_master_enabled=1
  
rpl_semi_sync_master_timeout=1000  #此单位是毫秒
  

  
Slave上:
  
[mysqld]
  
rpl_semi_sync_slave_enabled=1
  确认半同步功能已经启用,通过下面的操作进行查看
  master上面
mysql> create database asyncdb;  
Query OK, 1 row affected (0.19 sec)
  

  
mysql> show status like 'rpl_semi_sync_master_yes_tx';
  
+-----------------------------+-------+
  
| Variable_name               | Value |
  
+-----------------------------+-------+
  
| Rpl_semi_sync_master_yes_tx | 2     |
  
+-----------------------------+-------+
  
1 row in set (0.00 sec)
  

  
mysql> show global status like 'rpl%';
  
+--------------------------------------------+--------+
  
| Variable_name                              | Value  |
  
+--------------------------------------------+--------+
  
| Rpl_semi_sync_master_clients               | 1      |
  
| Rpl_semi_sync_master_net_avg_wait_time     | 127295 |
  
| Rpl_semi_sync_master_net_wait_time         | 127295 |
  
| Rpl_semi_sync_master_net_waits             | 1      |
  
| Rpl_semi_sync_master_no_times              | 0      |
  
| Rpl_semi_sync_master_no_tx                 | 0      |
  
| Rpl_semi_sync_master_status                | ON     |
  
| Rpl_semi_sync_master_timefunc_failures     | 0      |
  
| Rpl_semi_sync_master_tx_avg_wait_time      | 127147 |
  
| Rpl_semi_sync_master_tx_wait_time          | 127147 |
  
| Rpl_semi_sync_master_tx_waits              | 1      |
  
| Rpl_semi_sync_master_wait_pos_backtraverse | 0      |
  
| Rpl_semi_sync_master_wait_sessions         | 0      |
  
| Rpl_semi_sync_master_yes_tx                | 2      |
  
+--------------------------------------------+--------+
  
14 rows in set (0.00 sec)
  slave上面:
mysql> stop slave io_thread;  
Query OK, 0 rows affected (0.08 sec)
  

  
mysql> start slave io_thread;
  
Query OK, 0 rows affected (0.03 sec)
  

  
mysql> show databases;
  
+--------------------+
  
| Database           |
  
+--------------------+
  
| information_schema |
  
| asyncdb            |
  
| db                 |
  
| mysql              |
  
| performance_schema |
  
| test               |
  
+--------------------+
  
6 rows in set (0.12 sec)
  我们至此已经实现了mysql数据库复制的半同步方式的架构,并且通过测试查看了复制功能。
  三:MySQL设置主-主复制:masterslave
  1、在两台服务器上各自建立一个具有复制权限的用户;让两个数据库互为主从的关系
  2、修改配置文件:
  把上面的连个数据库的配置文件重新配置,其配置如下
  主服务器上面
[mysqld]  
log-bin=mysql-bin
  
relay-log = relay-mysql
  
relay-log-index = relay-mysql.index
  
server-id       = 1
  
datadir = /mydata/data
  
auto-increment-increment = 2     #每次跳两个数。
  
auto-increment-offset = 1       #从1开始。
  从服务器上面
[mysqld]  
server-id = 2
  
log-bin = mysql-bin
  
relay-log = relay-mysql
  
relay-log-index = relay-mysql.index
  
auto-increment-increment = 2
  
auto-increment-offset = 2
  如果此时两台服务器均为新建立,且无其它写入操作,各服务器只需记录当前自己二进制日志文件及事件位置,以之作为另外的服务器复制起始位置即可。
master:查看日志文件信息  
mysql> show master status;
  
+------------------+----------+--------------+------------------+
  
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  
+------------------+----------+--------------+------------------+
  
| mysql-bin.000001 |      107 |              |                  |
  
+------------------+----------+--------------+------------------+
  
Slave:查看服务器日志文件信息
  
mysql> show master status;
  
+------------------+----------+--------------+------------------+
  
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  
+------------------+----------+--------------+------------------+
  
| mysql-bin.000001 |      107 |              |                  |
  
+------------------+----------+--------------+------------------+
  
1 row in set (0.00 sec)
  在各个服务器上建立账号和权限,来进行同步设置
master上面:  
mysql> GRANT REPLICATION SLAVE ON *.* TO 'boss'@'172.16.%.%' IDENTIFIED BY '123456';
  
mysql> flush privileges;
  
slave上面:
  
mysql> GRANT REPLICATION SLAVE ON *.* TO 'chrisli'@'192.168.%.%' IDENTIFIED BY 'work';
  
mysql> flush privileges
  在每一个服务器上指定对另一台服务器为自己的主服务器即可:
server1  
mysql> CHANGE MASTER TO MASTER_HOST='172.16.7.2',MASTER_USER='chrisli',MASTER_PASSWORD='work',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=344;
DSC0005.png

server2:  
mysql> CHANGE MASTER TO MASTER_HOST='172.16.7.1',MASTER_USER='boss',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=345;
DSC0006.png

  双主架构配置基本完成,下面在各自上面启动复制进程吧~并进行测试:
DSC0007.png

DSC0008.png

  至此我们通过上面的测试,可以看出已经实现了主主复制的功能.
  MySQL 主主(双主)实施部署
  http://jishuweiwang.blog.51cto.com/6977090/1417621
  MySQL-Proxy实现读写分离部署文档
  http://jishuweiwang.blog.51cto.com/6977090/1416006
  http://blog.csdn.net/justdb/article/details/17331569
  MySQL读写分离之Amoeba实现
  http://jishuweiwang.blog.51cto.com/6977090/1416359
  http://www.cnblogs.com/xiaocen/p/3736095.html
  http://www.it165.net/database/html/201310/4645.html
  http://zhou123.blog.51cto.com/4355617/983592
  http://www.xuchanggang.cn/archives/559.html
  CentOS6.4+MySQL-5.6.12 二种安装详解
  http://freeloda.blog.51cto.com/2033581/1252067#comment
  MySQL 5.5.35 单机多实例配置详解
  http://freeloda.blog.51cto.com/2033581/1349312
mysql-mmm实现对mysql replication进行监控和故障迁移
  http://www.xuchanggang.cn/archives/579.html
  http://chocolee.blog.51cto.com/8158455/1418506
amoeba+keepalived+mmm实现mysql读写分离高可用架构
  http://www.xuchanggang.cn/archives/610.html
  Linux下编译安装配置MariaDB数据库的方法
  http://www.iyunv.net/LINUXjishu/128753.html
  源代码编译MYSQL5.6 环境下的MHA+KEEPALIVED的安装和维护
  http://zuoyuezong.blog.51cto.com/6444039/1439579
  MySQL备份与恢复常用方法总结(mysqldump/xtrabackup/lvm快照备份/逻辑备份与恢复/二进制日志及时点恢复)
  http://junwang.blog.51cto.com/5050337/1437365



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-603351-1-1.html 上篇帖子: Python 原生模块 操作Mysql 下篇帖子: 基于Xtrabackup备份mysql(MairaDB)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表