Mysql主从方案
序言
Mysql数据库可以通过源码编译安装,也可以通过RPM或yum安装,安装方法自选,但是我推荐用源码编译安装。
数据库安装
mysql主从复制中:
第一步:master记录二进制日志。在每个事务更新数据完成之前,master在二进制日志记录这些改变。MySQL将事务写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。第二步:slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经执行完master产生的所有文件,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。第三步:SQL slave thread(SQL从线程)处理该过程的最后一步。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_USERmysql运行用户
扩展:
-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 是指使用4个cpu核心数,如我们的双核四线程,就可以写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/ //初始化看这个下面有无mysql和test等数据库
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主从同步
环境准备:
主机名
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
修改从服务器配置文件:
从服务器没必要开启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 Ttestvalues(1,'tianhe');
从数据库上查看:
Mysql> select * from Ttest;
去从服务器查看数据
==================================================================
主从搭建完成
==================================================================