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
3 进入数据库( 主服务器)
$ grant replication slave on *.* to '用户'@'%' identified by '密码';
$ grant replication slave on *.* to 'slave'@'%' identified by '123';
#注意此处的账户和密码用于从服务器连接
$ show master status; #file是从服务器连接的二进制文件,position是空间大小
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; #开启从服务,
5、测试 在主数据库创建 wyy数据库
$ create database wyy
$ show databases;# 查看从数据库
实验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
创建相关目录
$ mkdir /var/lib/mysqla #根据配置文件的要求进行创建
$ mkdir /var/lib/mysqlb #根据配置文件的要求进行创建
创建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
修改目录的权限
$ chown -R mysql:mysql /var/lib/mysqla
$ chown -R mysql:mysql /var/lib/mysqlb
2 主服务器配置文件修改
$ vim /etc/my.cnf
log-bin=mysql-bin
server-id=61 (第二台机器设置为62) #两台主数据库都要配置
$ service mysqld start
3 主服务器创建从数据库登陆的账户和密码 并设定权限。
$ grant replication slave on *.* to '用户'@'%' identified by '密码';
$ grant replication slave on *.* to 'slave'@'%' identified by '123';
$ show master status; #两台主数据库都要操作
此处的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
5、设置数据库密码
$ mysqladmin -uroot password 123 -P 3306 -S
$ /var/lib/mysqla/mysql.sock
6、登陆数据库
$ mysql -P 3306 -S /var/lib/mysqla/mysql.sock #此处是未设置密码的登陆
$ mysql -uroot -p -P 3306 -S /var/lib/mysqla/mysql.sock #此处是已设置密码的登陆
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;
8、查看从数据库的状态、此时从数据库I/O,SQL线程都是关闭的。
$ show slave status\G;
9、start slave;再次查看从数据的I/O,SQL进程开启了。
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
$ service mysqld restart
# 进入数据库( 主服务器)
$ grant replication slave on *.* to 'slave'@'%' identified by '123';
$ show master status;
#此处是S2数据库连接需要的二进制文件和文件大小
# 进入数据库( 从服务器)
$ 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;
$ start slave;
$ show slave status\G;
# 进入数据库( 从服务器)
$ grant replication slave on *.* to 'slave'@'%' identified by '123';
$ show master status;
#此处是S1 数据库连接所需要的二进制文件名,文件大小
# 进入数据库( 主服务器)
$ 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;
$ start slave;
$ show slave status\G;
测试:进入到相应同步的数据库如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
$ 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)
$ service mysqld restart
# 进入数据库( 主服务器)
$ grant all privileges on *.* to 'slave@'%' identified by '123';
$ show master status;
进入数据库( 从服务器
$ change master to master_host='主服务器IP',master_user='用户',master_password='密码',master_log_file='二进制文件',master_log_pos=文件空间大小;
$ show slave status\G;
$ start slave;
配置 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的配置
配置连接三个server 分别是server1(主) server2(从) 、server3(从)
分别三个数据库创建amoeba账户 密码123.
填入各自的IP
分别指定master 和slave 的 server各自是 server1 和 server2、server3
如果要添加权重则,可以server2,server3,server3的方式
设置默认读取的server 以及读写分离
$ 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 的数据。
注:本文为博主查阅多方资料整理而成,如有侵权请留言联系博主删除。
学习新东西,不要忘记复习旧知识,这样你才能更好!