Mysql主从方案

Mysql主从方案

 

序言

Mysql数据库可以通过源码编译安装,也可以通过RPMyum安装,安装方法自选,但是我推荐用源码编译安装。

数据库安装

mysql主从复制中:

第一步:master记录二进制日志。在每个事务更新数据完成之前,master在二进制日志记录这些改MySQL将事务写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。
第二步:slavemasterbinary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程I/O线程在master上打开一个普通的连接,然后开始binlog dump processBinlog dump processmaster的二进制日志中读取事件,如果已经执行完master产生的所有文件,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。
 第三步:SQL slave threadSQL从线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重新执行其中的事件而更新slave的数据,使其与master中的数据一致。

 

Mysql源码编译安装

1)安装cmake编译工具

    yum -y install cmake -y

 3)安装依赖

    yum -y install  gcc gcc-c++  ncurses-devel    用于终端操作的开发包

  4)添加用户

useradd -u 8001 -s /sbin/nologin mysql

  5)创建数据库存放目录

mkdir /data

tar -zxvf mysql-5.6.26.tar.gz -C /usr/local/

cd  /usr/local/mysql-5.6.26

6)编译安装

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DMYSQL_DATADIR=/data -DMYSQL_USER=mysql

 

 

参数说明:

-DCMAKE_INSTALL_PREFIX   数据文件存放目录

-DMYSQL_UNIX_ADDR         sock文件路径

-DDEFAULT_CHARSET 默认字符集

-DDEFAULT_COLLATION 默认字符校对

-DWITH_EXTRA_CHARSETS 扩展字符支持  默认all

-DWITH_storage_STORAGE_ENGINE   存储引擎的支持,默认支持MyISAM,MERGE,MEMORY,CVS存储引擎

-DENABLED_LOCAL_INFILE=1   启用加载本地数据

-DMYSQL_DATADIR 数据存放目录

-DMYSQL_USER mysql运行用户

扩展:

-DWITH_PARTITION_STORAGE_ENGINE=1   支持分区表

-DINSTALL_LIBDIR=dir_name

-DSYSCONFDIR=dir_name    The default my.cnf option file directory

7)安装

 make -j 4 && make install   -j 4 是指使用4cpu核心数,如我们的双核四线程,就可以写4

8)配置mysql

chown -R mysql:mysql /usr/local/mysql/                //属主属组更改

cp /usr/local/mysql/support-files/my-default.cnf  /etc/my.cnf       //覆盖原配置文件

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld    //启动脚本

chmod +x /etc/init.d/mysqld //赋予启动脚本执行权限

#vim /etc/init.d/ mysqld                                                   //更改启动脚本中指定mysql位置

basedir=

datadir=

#修改为

basedir=/usr/local/mysql

datadir=/data

# chkconfig mysqld  on                                         //开机启动

初始化数据库

 # /usr/local/mysql/scripts/mysql_install_db --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data --user=mysql

#类似于在rpm安装的时候启动数据库弹出的初始化消息

ls /data/                     //初始化看这个下面有无mysqltest等数据库

 

ln -s /usr/local/mysql/bin/* /bin/                 //这个里面是部分命令,让系统直接调用

servie mysqld  start //启动数据库

mysql_secure_installation                                   //初始安全设置(设置root密码,123456[记住,编译安装之前,记得除去mysql mysql-devel mysql-libs三个软件]

[root@master ~]# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL

      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MySQL to secure it, we'll need the current

password for the root user.  If you've just installed MySQL, and

you haven't set the root password yet, the password will be blank,

so you should just press enter here.

Enter current password for root (enter for none): //初始化时密码为空,所以直接回车

OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MySQL

root user without the proper authorisation.

Set root password? [Y/n] y       //是否为root设置密码,选择是

New password: 输入新密码

Re-enter new password: 重复新密码

Password updated successfully!

Reloading privilege tables..

 ... Success!

By default, a MySQL installation has an anonymous user, allowing anyone

to log into MySQL without having to have a user account created for

them.  This is intended only for testing, and to make the installation

go a bit smoother.  You should remove them before moving into a

production environment.

Remove anonymous users? [Y/n] y   //是否移除匿名登录,选择是

 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This

ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y    //禁用root用户远程登录,选择是

 ... Success!

By default, MySQL comes with a database named 'test' that anyone can

access.  This is also intended only for testing, and should be removed

before moving into a production environment.

Remove test database and access to it? [Y/n] y  //删除测试数据库,选择是

 - Dropping test database...

 ... Success!

 - Removing privileges on test database...

 ... Success!

Reloading the privilege tables will ensure that all changes made so far

will take effect immediately.

Reload privilege tables now? [Y/n] y   //重新加载授权信息

 ... Success!

All done!  If you've completed all of the above steps, your MySQL

installation should now be secure.

Thanks for using MySQL!

Cleaning up...

初始化完毕

mysql -uroot -p123456                                //测试登录(OK

 

到此数据库编译安装完毕

 

部署MySQL主从同步 <M-S>

环境准备:

主机名

IP

系统/MySQL版本

角色

master

192.168.100.101

Rhel6.5/5.6.26

Master

slave

192.168.100.102

Rhel6.5/5.6.26

slave

配置主数据库服务器master

创建需要同步的数据库:

mysql> create database HA;

mysql> use HA;

mysql> create table T1(id int,name varchar(20));

service mysqld stop

配置my.cnf:

vim /etc/my.cnf

log-bin=mysql-bin-master  #启用二进制日志

server-id       = 1   #本机数据库ID 标示

binlog-do-db=HA #可以被从服务器复制的库。二进制需要同步的数据库名

binlog-ignore-db=mysql  #不可以被从服务器复制的库

重启mysql:

service mysqld restart

授权:

mysql> grant replication slave on *.* to slave@192.168.100.102 identified by "123456";

 

查看状态信息:

mysql> show master status;

 

查看二进制日志:

ls /data/

mysql> show binlog events\G

复制前要保证同步的数据库一致

mysqldump  -uroot -p123456  HA >HA.sql

#也可以导出数据库将导出的数据库传给从服务器

scp HA.sql 192.168.100.102:/root

配置从数据库服务器slave

两台数据库服务器mysql版本要一致

Mysql -uroot -p123456

mysql> show variables like '%version%';

 

测试连接到主服务器是否成功

mysql -uslave -p123456 -h 192.168.100.101

只有复制的权限

导入数据库,和主数据库服务器保持一致

mysql -uroot -p123456

mysql> create database HA;

mysql -uroot -p123456 HA<HA.sql

修改从服务器配置文件:

从服务器没必要开启bin-log日志

service mysqld stop

vim /etc/my.cnf

server-id       = 2  #从服务器ID号,不要和主ID相同 ,如果设置多个从服务器,每个从服务器必须有一个唯一的server-id值,必须与主服务器的以及其它从服务器的不相同。可以认为server-id值类似于IP地址:这些ID值能唯一识别复制服务器群集中的每个服务器实

mysql> change master to master_host='192.168.100.101',master_user='slave',master_password='123456';

mysql> start slave;

mysql> show slave status\G  查看状态

Slave_IO_Running :一个负责与主机的io通信

Slave_SQL_Running:负责自己的slave mysql进程

再到主服务器上查看状态:

mysql> show processlist \G

插入数据测试同步:

mysql> insert into Ttest values(1,'tianhe');

从数据库上查看:

Mysql> select * from Ttest;

去从服务器查看数据

 ==================================================================

          主从搭建完成

  ==================================================================

 

posted @ 2019-06-13 14:46  compy  阅读(176)  评论(0编辑  收藏  举报