Mysql 使用帮助

yum 安装

安装包

yum install -y mysql mysql-server php-mysql

移除已有的包

yum remove mysql mysql-server php-mysql

shell

编码设置

查看编码

SHOW VARIABLES LIKE 'character_set_%';

一、编辑MySql的配置文件

MySql的配置文件Windows下一般在系统目录下或者在MySql的安装目录下名字叫my.ini,可以搜索,Linux下一般是 /etc/my.cnf

--在 [mysqld] 标签下加上三行

default-character-set = utf8

character_set_server = utf8

lower_case_table_names = 1 //表名不区分大小写(此与编码无关)

--在 [mysql] 标签下加上一行

default-character-set = utf8

--在 [mysql.server]标签下加上一行

default-character-set = utf8

--在 [mysqld_safe]标签下加上一行

default-character-set = utf8

--在 [client]标签下加上一行

default-character-set = utf8

Linux源码安装

1.假设已经有mysql-5.5.10.tar.gz以及cmake-2.8.4.tar.gz两个源文件

(1)先安装cmake(mysql5.5以后是通过cmake来编译的)

tar -zxv -f cmake-2.8.4.tar.gz
cd cmake-2.8.4
./configure
make
make install
(2)创建mysql的安装目录及数据库存放目录
mkdir -p /usr/local/mysql //安装mysql
mkdir -p /usr/local/mysql/data //存放数据库
(3)创建mysql用户及用户组
groupadd mysql
useradd -r -g mysql mysql
(4)安装mysql
tar -zxv -f mysql-5.5.10.tar.gz
cd mysql-5.5.10
root@ rhel5 mysql-5.5.10]#cmake .
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql
-DMYSQL_DATADIR=/usr/local/mysql/data
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
-DEXTRA_CHARSETS=all
-DENABLED_LOCAL_INFILE=1
make
make install
参数说明:
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql //安装目录
-DINSTALL_DATADIR=/usr/local/mysql/data //数据库存放目录
-DDEFAULT_CHARSET=utf8     //使用utf8字符
-DDEFAULT_COLLATION=utf8_general_ci //校验字符
-DEXTRA_CHARSETS=all     //安装所有扩展字符集
-DENABLED_LOCAL_INFILE=1    //允许从本地导入数据
注意事项:
重新编译时,需要清除旧的对象文件和缓存信息。
make clean
rm -f CMakeCache.txt
rm -rf /etc/my.cnf
2.配置
(1)设置目录权限
cd /usr/local/mysql
chown -R root:mysql . //把当前目录中所有文件的所有者所有者设为root,所属组为mysql
chown -R mysql:mysql data
(2)将mysql的启动服务添加到系统服务中
cp support-files/my-medium.cnf /etc/my.cnf
(3)创建系统数据库的表
cd /usr/local/mysql
scripts/mysql_install_db --user=mysql
(4)设置环境变量
vi /root/.bash_profile
在PATH=$PATH:$HOME/bin添加参数为:
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin:/usr/local/mysql/lib
source /root/.bash_profile
(5)手动启动mysql
cd /usr/local/mysql
./bin/mysqld_safe --user=mysql &   //启动MySQL,但不能停止
启动日志写在此文件下:/usr/local/mysql/data/localhost.err
关闭MySQL服务
mysqladmin -u root -p shutdown  //这里MySQL的root用户还没有配置密码,所以为空值。需要输入密码时,直接点回车键即可。
(6)另一种简单的启动mysql的方法(mysql已经被添加到系统服务中)
注意:在/usr/local/mysql/share/mysql/mysql.server中,而本系统中,mysql.server在/usr/local/mysql/support-files/mysql.server中。
拷贝到 /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
service mysqld start
service mysqld start
service mysqld stop
service mysqld restart
(7)创建用户并授权
创建管理员
mysql -u root mysql
CREATE USER '用户名'@'%' IDENTIFIED BY '密码';
GRANT all privileges ON *.* TO '用户名'@'%' WITH GRANT OPTION;
flush privileges;
创建授权某一数据库
CREATE USER '用户名'@'%' IDENTIFIED BY '密码';
GRANT CREATE,DROP,SELECT,INSERT,DELETE,UPDATE,ON 数据库名称.* TO '用户名'@'%';
flush privileges;
若还不能进行远程连接,则配置防火墙
/
/etc/rc.d/init.d/iptables stop
注:如果不能远程连接,出现错误mysql error number 1130,则加入下面语句试试:
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '******' WITH GRANT OPTION;

主从配置

在Web应用系统中,数据库性能是导致系统性能瓶颈最主要的原因之一。尤其是在大规模系统中,数据库集群已经成为必备的配置之一。集群的好处主要有:查询负载、数据库复制备份等。

MySQL数据库支持数据库的主从复制功能,因此在集群方面具有其独特的优势。众多国内外大型网站架构体系中,均采用了MySQL的主从数据库配置来实现查询负载、数据库热备等功能。本人在实际的Web项目中也涉及到这一需求,在此将如何配置实现做个简单小结。

1、实验环境

主库:Ubuntu IP:192.168.1.189

从库:Ubuntu IP:192.168.1.188

2、主数据库配置

A、修改配置文件/etc/mysql/my.cnf or /etc/my.conf

任何一台MySQL数据库服务器都可以配置为集群主服务器,打开MySQL的配置文件,在配置文件中加入下面两行:

server-id = 1

log-bin = binlog_repl

binlog-do-db = test //设置需要同步的数据库,如果需要设置多个,则加入多条这行语句。

注:MySQL是通过二进制的日志文件来进行主从数据库复制的,所以必须开启日志功能,即上述的log-bin;另外在集群中,每台数据库服务器都需要指定一个唯一ID,这里我们指定为1。

给主数据库授权一个可以进行复制的用户,执行如下命令:

grant replication slave on *.* to 'slave'@'%' identified by '123';

执行成功后,重启MySQL。

B、锁定数据库并备份

mysql>flush tables with read lock;

< code > 备份数据库,传输到从数据库的数据目录下/var/lib/mysql;

C、用show master status;命令查看主数据库状态

File

Position

Binlog_Do_DB

Binlog_Ignore_DB

binlog_repl.000001106test

记录下File和Position的值。

D、主数据库解锁:unlock tables;

3、从数据库配置

A、修改配置文件/etc/mysql/my.cnf or /etc/my.conf

在mysqld下加入如下代码:

server-id=2

master-host=192.168.1.189

master-user=slave

master-password=123

保存后,重启mysql服务。

B、设置slave参数,启动

在mysql下执行slave stop命令,停止slave服务;

mysql> change master to

-> master_host='192.168.1.189',

-> master_user='slave',

-> master_password='123',

-> master_log_file='binlog_repl.000001',

-> master_log_pos=106;

注意:这里的masterlogfile,masterlogpos的值要和master的值一致。否则会无法同步。

执行slave start命令,启动服务。

4、验证同步

从数据库下运行show slave status \G;

如果能看到:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

说明已经成功启动了主从数据库的数据同步。

在主数据库中执行插入语句 insert into user values('kangqing','1234567890');

在从数据库中执行查询,可以看到主数据库插入的数据已经同步到从数据库表中。

估计是权限问题

解决方法:

修改/var/lib/mysql文件夹的权限,对mysql.mysql用户赋予读写权限即可。

chown -R mysql:mysql /database/mysql

chmod +r+w+x -R /database/mysql

linux 下备份

#!/bin/bash

backDate=`date +%Y-%m-%d_%H_%M`

backDateFile=/database/mysql/sql/mysql.$backDate.7z

testSQL="select(abs(-9))"

shellCmd="mysql -h 127.0.0.1 -uroot --database=test -e $testSQL"

$shellCmd

result=$?

if [ $result -eq 0 ]

then

if [ -f $backDateFile ]; then

rm -f $backDateFile

echo "delete old "$backDateFile

else

echo "to "$backDateFile

fi

mysqldump --all-databases --events --ignore-table=mysql.events -h 127.0.0.1 -uroot | 7za a -aoa -mx=9 -m0=PPMd:mem=256M -si $backDateFile

cd /database/mysql/sql

/database/mysql/bin/tranftp.sh mysql.$backDate.7z

exit 0;

else

echo "not start mysql"

exit 1;

fi

windows 下备份

set bakfile=d:\website\database\mysql.%date:~0,10%.sql.7z

del %bakfile%

d:\mysql\bin\mysqldump --all-databases -h localhost -uroot -p密码 | 7z a -aoa -mx=9 -m0=PPMd:mem=256M -si %bakfile%

定时任务

10 2 * * 2,4 /database/mysql/bin/cleandump.sh

10 2 * * 1,5 /database/mysql/bin/mydump.sh