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