得意淡然,失意坦然;喜而不狂,忧而不伤。

Mysql主从配置实践(一主两从)

数据存储 admin 789次浏览 已收录 0个评论 扫描二维码
安装前的确认:
 
1, 是否存在mysql这个用户
 
finger mysql
 
2, 如果不存在,请切换root用户,添加mysql用户和mysql组
 
添加mysql组:
 
groupadd mysql
 
用户可以建立一个专门用于MySQL的用户组和用户名,用于启动和关闭MySQL数据库,以及对数据库的一些操作(这里不是必须的,如果系统mysql账号的密码不是公知的,最好不用。另外测试环境最好不要用root账号安装mysql,减少由于密码经常改变导致的一些麻烦。)。建立用户组可以使用如下命令:
#groupadd mysql    //创建mysql组
 
命令执行完毕后用户可以查看/etc/group文件,正确添加用户组后,用户可以在该文件中看到类似于以下的一行内容:
mysql :x :101:
 
添加mysql用户:
 
useradd –g mysql mysql
 
添加了用户组后,接着应该添加用户。在Linux下添加用户使用useradd命令。此处,添加一个名为mysql的用户,使用的命令如下:
 
#useradd -g mysql mysql
 
该命令用于创建mysql用户,并放到mysql组里。-g参数选项用于指定一个组名,并将新建的用户添加到该组,作为该组的一个成员。
 
3, 可以打开下载解压的tar包,查看其中的文件,获知安装时需要配置的内容。获取mysql安装包,确认mysql安装包的版本与线上版本一致
 
4, 提前确认安装的mysql实例使用的端口号,保证各实例不冲突。检查该端口号是否已被占用
 
netstat –nat|grep 端口号
 
 
netstat –nat|grep LISTEN
 
开始安装:
 
1, 解压tar包文件
 
tar zvxf mysql-5.1.45.tar.gz
 
2, 进入解压的目录内
 
cd mysql-5.1.45
3, 配置相关mysql安装参数。
 
./configure –prefix=/home/work/mysql_user –with-charset=utf8 –with-extra-charsets=all –with-tcp-port=3316 –with-unix-socket-path=/home/work/mysql_user/var/mysql.sock –with-plugins=innobase
 
飘黄部分根据安装不同的mysql实例修改。下同。
 
–prefix= 指定的是mysql要安装的路径,如mysql_newyouxi
 
–with-charset 指定默认的服务器字符集
 
–with-tcp-port=端口号 设置端口号,不是必须的,可以在配置文件里随时修改。
 
–with-plugins=innobase 安装innodb引擎
 
多人同时使用一个mysql源文件目录进行安装时,需要在make前先make clean
 
4, make
 
5, make install
 
6, 到/home/work/mysql_user 目录下,cp share/mysql/my-medium.cnf my.cnf 。 修改my.cnf改配置成与主库一致
 
7, 检查是否安装成功,在bin目录下
 
./mysql_install_db –basedir=/home/work/mysql_msg –datadir=/home/work/mysql_msg/var
 
有些账号在mysql_install_db时不具有/user/local/var目录权限。
 
可以通过 ./mysql_install_db –basedir= /home/work/mysql_test –datadir= /home/work/mysql_test/var 进行灵活的修改,修改为当前安装目录下即可。
 
8, 配置完成后,启动mysql;nohup ./bin/mysqld_safe &(注意:如果主库也是一个从库,则用nohup ./bin/mysqld_safe –skip-slave-start &方式启动)
 
9, 查看设置的端口是否正常监听到:netstat –nat|grep LISTEN
 
10, 检查数据库是否搭建成功:通过客户端登陆验证
 
Mysql登录:./bin/mysql –h**** -u***** -P****** -p****
 
-u:用户名
 
-P:监听的端口号
 
-p:密码
 
-h:数据库服务器ip地址
 
如果无法登录,请查看error log。
 
二,设置主从库
 
1,在主库授权一个在my.cnf设置的master-user帐号:
 
在主库上运行—添加一个同步账户:
 
登录主库的mysql执行下面sql语句
 
cd bin
 
./mysql –uroot 执行下面语句
 
GRANT REPLICATION SLAVE ON *.* TO 'msgmaster'@'ip' IDENTIFIED BY '123456';'msgmaster'是与从库中master-user的值保持一致的。
 
运行 flush privileges 使授权生效;
 
2,停止主数据库
 
启动和停止数据库可以有以下两种方法:
 
方法一:
 
./bin/mysqladmin –u –P –p –h shutdown
 
-u 用户名
 
-P 数据库端口号
 
-p 密码
 
-h 数据库服务器ip地址
 
方法二:./mysql.server stop (start / restart)
 
需要将share/mysql/mysql.server文件拷贝到/home/work/mysql_msg目录下,就可以直接执行mysql.server命令启动或停止数据库;./mysql.server start(stop/restart)
 
3, 修改主数据库的配置文件my.cnf(刚才拷贝出来的那个cnf文件)
 
在mysqld节点下,设置:
 
server-id = 1
 
****设置mysql log路径****(打开慢查询记录log和mysql查询日志log文件)
 
log-bin=mysql-bin
 
log-slave-updates
 
log=mysql.log
 
log-slow-queries=slow.log
 
long_query_time=2
 
4, 同样,修改从数据库my.cnf文件的内容
 
在mysqld节点下,设置:
 
server-id = 2(不能与主库的id相同,一般设置主库为1,从库为2,3,4,,,,,)
 
master-host = 10.48.234.12(主库的ip地址)
 
master-user = msgmaster(主库的user)
 
master-password = 123456(主库的password)
 
master-port = 3307(主库的端口号,这里从库的端口号必须和主库的一致)
 
5, 查看当前主数据库状态:
 
show master status;
 
6, 启动从数据库:nohup ./bin/mysqld_safe –skip-slave-start &.
 
7, 确认从库镜像主库的镜像点,在从库上执行以下语句:
CHANGE MASTER TO MASTER_HOST='10.48.234.78',MASTER_PORT=5506,MASTER_USER='newyouximaster',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=9379;
 
CHANGE MASTER TO MASTER_HOST='hz01-iknow-udw02.hz01.baidu.com',MASTER_PORT=3306,MASTER_USER='udamaster',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000009',MASTER_LOG_POS=106;
 
CHANGE MASTER TO MASTER_HOST='hz01-iknow-udw02.hz01.baidu.com',MASTER_PORT=3306,MASTER_USER='udamaster',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000009',MASTER_LOG_POS=56355;flush privileges;
 
flush privileges;
 
这里黄色位置的信息必须与主数据库show master status,且必须大写;的结果信息一致。
 
8, 启动从库的同步:
 
start slave;(停止命令:stop slave)
 
9,查看从服务器状态: show slave statusG;
 
主要查看下面两项
 
Slave_IO_Running: Yes
 
Slave_SQL_Running: Yes
 
这两项都是yes,则表示从数据库镜像正常,否则就要开始排查错误
 
如果出现以下报错:
ERROR 1200 (HY000): The server is not configured as slave; fix in config file or with CHANGE MASTER TO
 
出现这种报错可以通过 执行Change master语句来解决:
change master to master_host='192.168.126.118',master_user='slavesyn',master_password='123456',master_log_file='mysql-bin.000010' ,master_log_pos=98;
 
遇到的问题:
 
1,
 
解决办法:
 
今天在安装MYSQL的时候,新建数据库用户。
#groupadd mysql
结果提示:bash: groupadd: command not found
是我变量不对吗?系统怎么会找不到groupadd 这条命令呢。
后来一想。原来是su的错。
之前是在普通用户下。直接 SU切换到ROOT用户。
退出换成SU – 再切换到ROOT用户就好了。
su 只能切换到管理员用户权限,不使用管理员的登陆脚本和搜索路径
su – 不但能切换到管理员权限而且使用管理员登陆脚本和搜索路径
使用su – 环境变量也跟着来啦~
 
2,
 
当大家看到 configure之后 出现cannot remove `libtoolT',需要在执行./configure 之前,先执行
 
autoreconf –force –install
libtoolize –automake –force
 
automake –force –add-missing
 
重新configuer 不报错即可。
 
3,报错
 
FATAL ERROR: Could not find ./bin/my_print_defaults
 
If you compiled from source, you need to run 'make install' to
 
copy the software into the correct location ready for operation.
 
If you are using a binary release, you must either be at the top
 
level of the extracted archive, or pass the –basedir option
 
pointing to that location.
 
解决办法:
 
./mysql_install_db –basedir=/home/work/mysql_msg/ –datadir=/home/work/mysql_msg/var
 
有些账号在mysql_install_db时不具有/user/local/var目录权限。
 
可以通过 ./mysql_install_db –basedir= /home/work/mysql_test –datadir= /home/work/mysql_test/var 进行灵活的修改,修改为当前安装目录下即可。
 
设置主数据库my.cnf文件:
 
server-id = 1
 
log-bin=/home/work/mysql_msg/logs/mysql-bin
 
binlog-do-db = dbname
 
binlog-ignore-db = mysql
 
server-id = 本机数据库 ID 标示,该部分还应有一个server-id=Master_id选项,其中master_id必须为1到232之间的一个正整数值
log-bin = 二进制日志的位置和名称
binlog-do-db = 需要备份的数据库名,如果备份多个数据库,重复设置这个选项即可
 
binlog-ignore-db = 不需要备份的数据库苦命,如果备份多个数据库,重复设置这个选项即可
 
4.报错
 
原因:a.数据库没有启动导致找不到mysql.sock;b.数据库已经启动,但是sock目录配置的不对;c.etc文件夹下存在默认的my.cnf
 
解决办法:a.启动数据库
 
b.修改my.cnf中sock的路径
 
c.登陆时使用这个命令./mysql -u root -S /home/work/mysql_msg/var/mysql.sock或者去/etc文件夹下查看是否存在my.cnf,如果存在,删除即可;使用./mysql -uroot就可以登录。
 
– my.cnf中与镜像数据库相关的配置项
 
1)某些数据库中的表不参与镜像
 
replicate-ignore-db = stat
 
replicate-ignore-table = stat.%
 
2) 跳过某些镜像错误
 
slave-skip-errors=22,0
 
3)需要跳过某些主数据库语句
 
stop slave
 
SET SQL_SLAVE_SKIP_COUNTER=n
 
一般SQL语句n=1, 带有auto-increment的语句n=2)完成后执行slave star
 
MySQL 创建用户与授权
 
一、创建用户:
 
命令:CREATE USER 'username'@'host' IDENTIFIED BY 'password';
 
说明:username – 你将创建的用户名, host – 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, 如果想让该用户可以从任意远程主机登陆,可以使用通配符%. password – 该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器.
 
例子: CREATE USER 'game'@'localhost' IDENTIFIED BY 'game';
 
二、授权:
 
命令:GRANT privileges ON databasename.tablename TO 'username'@'host'
 
说明: privileges – 用户的操作权限,如SELECT , INSERT , UPDATE 等.如果要授予所的权限则使用ALL.;databasename – 数据库名,tablename-表名,如果要授予该用户对所有数据库和表的相应操作权限则可用*表示, 如*.*.
 
例子: GRANT SELECT, INSERT ON test.user TO 'game'@'%';
GRANT ALL ON * .* TO 'game'@'%';
 
注意:用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令:
GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;
 
三、查看当前所有用户
 
命令:
 
SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;

pitata技术乐园 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Mysql主从配置实践(一主两从)
喜欢 (0)
[103531948@qq.com]
分享 (0)
发表我的评论
取消评论
表情 斜体

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址