MySQL--实验(主从-一主多从-多主一从-读写分离)

实验1:主从服务器

1 安装 MySQL 服务 - 开启服务-设置密码

$ yum -y install mysql mysql-server
$ service mysqld start
$ mysqladmin -uroot password 123456

2 修改配置文件-主从都要设置

$ vim /etc/my.cnf
	log-bin=mysql-bin
	server-id=61  (从服务器设置为62)  # 同一个主从环境中,server-id 不能冲突
# 重启数据库	
$ service mysqld restart

img

img

3 进入数据库( 主服务器)

$ grant replication slave on *.* to '用户'@'%' identified by '密码'; 
$ grant replication slave on *.* to 'slave'@'%' identified by '123';       
#注意此处的账户和密码用于从服务器连接
$ show master status;   #file是从服务器连接的二进制文件,position是空间大小

img

4 进入数据库( 从服务器)

# change master to master_host='主服务器IP',master_user='用户',master_password='密码',master_log_file='二进制文件',master_log_pos=文件空间大小; 
$ change master to master_host='192.168.11.61',master_user='slave',master_password='123',master_log_file='mysql-bin.000001',master_log_pos=246;                    
#注意,slave处于关闭状态才可执行
$ show  slave status\G;   # 查看当前数据库同步状态
$ start slave;    #开启从服务,

img

img

img

5、测试 在主数据库创建 wyy数据库

$ create database wyy 
$ show databases;# 查看从数据库

img

img

实验2: 主主从服务器

1 从服务器修改配置文件

$ vim /etc/my.cnf
  [mysqld_multi]
  mysqld=/usr/bin/mysqld_safe
  mysqladmin=/usr/bin/mysqladmin
  log=/tmp/multi.log
 [mysqld61] 
  port=3306
  pid-file=/var/lib/mysqla/mysqld.pid
  datadir=/var/lib/mysqla
  socket=/var/lib/mysqla/mysql.sock
  server-id=63                     #注意注意:server id 不能和主数据库server id 一致!!
  user=mysql
[mysqld62] 
  port=3307
  pid-file=/var/lib/mysqlb/mysqld.pid
  datadir=/var/lib/mysqlb
  socket=/var/lib/mysqlb/mysql.sock
  server-id=63                     #注意注意:server id 不能和主数据库server id 一致!!          
  user=mysql

img

创建相关目录

$ mkdir /var/lib/mysqla                          #根据配置文件的要求进行创建
$ mkdir /var/lib/mysqlb                          #根据配置文件的要求进行创建

img

创建mysql启动初始文件

$ mysql_install_db --datadir=/var/lib/mysqla --user=mysql
$ mysql_install_db --datadir=/var/lib/mysqlb --user=mysql
创建成功后切换到目录下查看是否生成相应的初始文件 
$ cd /var/lib/mysqla  cd/var/lib/mysqlb

img

修改目录的权限

$ chown -R  mysql:mysql  /var/lib/mysqla
$ chown -R  mysql:mysql  /var/lib/mysqlb

img

2 主服务器配置文件修改

$ vim /etc/my.cnf
  log-bin=mysql-bin
  server-id=61  (第二台机器设置为62)                     #两台主数据库都要配置
$  service mysqld start

img

img

3 主服务器创建从数据库登陆的账户和密码 并设定权限。

$ grant replication slave on *.* to '用户'@'%' identified by '密码';
$ grant replication slave on *.* to 'slave'@'%' identified by '123';
$ show master status;                             #两台主数据库都要操作

img

此处的file 是从服务器连接主数据库的二进制文件,position 是文件空间大小。等下从服务器连接时需要使用

4、开启从数据库。

mysqld_multi --defaults-file=/etc/my.cnf start 主1id号
mysqld_multi --defaults-file=/etc/my.cnf start  61
mysqld_multi --defaults-file=/etc/my.cnf start 主2id号
mysqld_multi --defaults-file=/etc/my.cnf start  62

img

5、设置数据库密码

$ mysqladmin -uroot password 123 -P 3306 -S
$ /var/lib/mysqla/mysql.sock

img

6、登陆数据库

$ mysql -P 3306 -S /var/lib/mysqla/mysql.sock                    #此处是未设置密码的登陆
$ mysql -uroot -p -P 3306 -S /var/lib/mysqla/mysql.sock               #此处是已设置密码的登陆

img

7、连接主数据库

$ change master to master_host='主服务器IP',master_user='用户',master_password='密码',master_log_file='二进制文件',master_log_pos=文件空间大小;

$ change master to master_host='192.168.11.61',master_user='slave',master_password='123',master_log_file='mysql-bin.000002',master_log_pos=246;

img

8、查看从数据库的状态、此时从数据库I/O,SQL线程都是关闭的。

$ show slave status\G; 

9、start slave;再次查看从数据的I/O,SQL进程开启了。

img

10、主数据库创建数据库,使用从数据库验证。

实验3:主主-服务器

两台主数据库,安装服务-开启服务

$ yum -y install mysql mysql-server
$ service mysqld start
$ mysqladmin -uroot password 123456

两台主数据库,修改配置文件

$ vim /etc/my.cnf
  log-bin=mysql-bin
  server-id=xx
  replicate-do-db=test                        
  #如果要同步多个数据库需要另起一行
  binlog-ignore-db=mysql
  binlog-ignore-db=information_schema 
  auto-increment-increment=2
  auto-increment-offset=1

img

$ service mysqld restart
# 进入数据库( 主服务器)
$ grant replication slave on *.* to 'slave'@'%' identified by '123'; 
$ show master status;                  
#此处是S2数据库连接需要的二进制文件和文件大小 

img

# 进入数据库( 从服务器)
$ change master to master_host='主服务器IP',master_user='用户',master_password='密码',master_log_file='二进制文件',master_log_pos=文件空间大小; 
$ change master to master_host='192.168.11.61',master_user='slave',master_password='123',master_log_file='mysql-bin.000001',master_log_pos=394;

img

$ start slave; 

$ show slave status\G;

img

# 进入数据库( 从服务器)
$ grant replication slave on *.* to 'slave'@'%' identified by '123'; 
$ show master status;                
#此处是S1 数据库连接所需要的二进制文件名,文件大小

img

# 进入数据库( 主服务器)

$ change master to master_host='主服务器IP',master_user='用户',master_password='密码',master_log_file='二进制文件',master_log_pos=文件空间大小;

$ change master to master_host='192.168.11.62',master_user='slave',master_password='123',master_log_file='mysql-bin.000001',master_log_pos=380; 

img

$ start slave;

img

$ show slave status\G; 

img

测试:进入到相应同步的数据库如test 内创建数据表。查看是否同步!

实验4、MySQL 读写分离

安装 Amoeba

$ yum -y install gcc gcc-c++
$ mkdir /usr/local/amoeba
$ tar -zxf jdk-7u40-linux-x64.gz -C /usr/local/amoeba/
$ vim /etc/profile
  JAVA_HOME=/amoeba/jdk
  export JAVA_HOME
  PATH=$JAVA_HOME/bin:$PATH
  export PATH

CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH
  export CLASSPATH

img

$ cd /amoeba/
$ ln -s jdk1.7.0_40/ jdk
$ . /etc/profile
$ echo $PATH
# 建立两台数据库的主从关系
$ yum -y install mysql mysql-server
$ service mysqld start
# 修改配置文件
$ vim /etc/my.cnf 
  log-bin=mysql-bin
  server-id=62(63、64)

img

$ service mysqld restart 
# 进入数据库( 主服务器)
$ grant all privileges on *.* to 'slave@'%' identified by '123';

img

$ show master status;

img

进入数据库( 从服务器

$ change master to master_host='主服务器IP',master_user='用户',master_password='密码',master_log_file='二进制文件',master_log_pos=文件空间大小;
$ show slave status\G; 
$ start slave; 

img

配置 amoeba 服务器,进入 amoeba 服务器

安装 Amoeba 服务器

$ unzip amoeba-mysql-1.3.1-BETA.zip -d /usr/local/amoeba
$ chmod -R a+x /usr/local/amoeba/bin/
$ cd /usr/local/amoeba/conf/
$ cd /usr/local/amoeba/bin/
$ vim amoeba
  DEFAULT_OPTS="-server -Xms256m-Xmx256m-Xss128k"
	DEFAULT_OPTS="-server -Xms256m-Xmx256m-Xss256k"

修改amoeba配置文件、配置amoeba的mysql的配置

img

配置连接三个server 分别是server1(主) server2(从) 、server3(从)
分别三个数据库创建amoeba账户 密码123.
填入各自的IP

img

分别指定master 和slave 的 server各自是 server1 和  server2、server3
如果要添加权重则,可以server2,server3,server3的方式 

img

设置默认读取的server 以及读写分离

img

$ nohup bash -x /usr/local/amoeba/bin/amoeba &
启动amoeba
登陆mysql                                 
#需要提前安装mysql客户端
$ mysql -uroot -p123  -P 9000  -h 192.168.11.62                 #配置文件指定的端口和IP
查询之前主数据库创建的hongfu下的user 
为了实验,此时,可以断开从数据库的 stop slave;
然后在amoeba 上添加数据  ,发现只有主数据库更新,从数据库不更新。
此时分别在从1 和从2 上写入不同的 数据
再次使用,amoeba查询,发现分别出现了 从1 和从2 的数据。
posted @ 2020-04-22 19:45  候你已久  阅读(95)  评论(0)    收藏  举报