1.创建数据库mysql
linux:
1.create database dcs;#CREATE DATABASE aaa DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
2.grant select,insert,update,delete,create,drop,alter,create view,show view,trigger,references on dcs.* to dcs@'%' identified by 'dcs'; #with grant option
(3.set password for dcs@'%' = password('dcs');#修改密码)
4.flush privileges;
2.迁移mysql数据目录(因mysql数据所在磁盘满了)
service mysql stop 或者service mysqld stop
去/etc/my.cnf中修改datadir的值为要迁移到的目录
chown mysql:mysql /data/mysql
由于linux是6版本的问题,有一个权限问题,运行:setenforce 0
拷贝原来的mysql数据文件到新目录
service mysql start
3.基本操作
登录mysql:mysql -uroot -p
显示数据库:show databases;
显示数据表:use mysql
show tables;
创建只读用户:grant select on ycb_test.* to readonly@'%' identified by 'readonly';
4.主从同步
1.主:grant all privileges on *.* to 'replication'@'%' identified by 'dcs';
flush privileges;
2.从:server-id = 112
#replicate-wild-ignore-table=mysql.%
#log-slave-updates #这个有需要可以开启
然后service mysql restart
STOP SLAVE;
3.主:server-id=113
log-bin
binlog-do-db=dcs
#binlog-do-db=mysql
log-bin-trust-function-creators=1
然后service mysql restart
3.主:mysqldump -uroot -p --lock-tables --add-drop-table --events --skip-triggers --routines --flush-logs --master-data=1 --databases dcs mysql --log-error=dumperror.log > db.sql
rsync /home/dcs/db.sql root@192.168.78.112:/home/dcs/
4.从:
(create database dcs DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;)
mysql < db.sql (source /home/dcs/db.sql(若无权限,拷贝到mysql能访问目录下执行))
#grant all privileges on *.* to replication@'%' identified by 'dcs';
5.从:(# grep -i "change master" db.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=106;
生成CHANGE MASTER语句,然后在mysql上执行)
(show slave status;)
CHANGE MASTER TO MASTER_HOST='192.168.78.113',MASTER_USER='replication',MASTER_PASSWORD='dcs',MASTER_LOG_FILE='localhost-bin.000006', MASTER_LOG_POS=120;
START SLAVE;
6.从: SHOW SLAVE STATUS;
查看Slave_IO_Running和Slave_SQL_Running的状态,如果都为Yes,那么就成功了。
注意:不要将同步的信息写入配置文件中,这样不方便管理,尤其是有变动需要重启。
note:
查看状态show master status; show slave status\G;
5.mysql中文会有乱码问题
show variables like 'character%'; character_set_database和character_set_server的值为latin1,并不是utf8,中文会有乱码问题
解决:
service mysqld stop
vim /etc/my.cnf
character_set_server=utf8
init_connect=‘SET NAMES utf8‘
然后service mysqld start
再看结果show variables like ‘character%‘;
6.replace into的坑
先尝试insert,如果主键存在,会先删除再新增,而主从同步的binlog中做update操作。
问题:1.如果表中存在自增长列,则该列值会发生变化,造成主库前后数据不一致,与从库数据也不一致。
2.如果只填了表中的几个列,其余列的数据会全部丢失。
7.not in 坑
not in集合中不允许有null值,否则查不出来数据。
8.忘记root密码怎么办(windows mysql 5.7 )
需要停服,以无权限模式来运行,重置root密码,然后重启服务
在计算机管理的服务中找到mysql,停止服务
打开cmd窗口
mysqld --defaults-file="C:\Program Files\MySQL\MySQL Server 5.1\my.ini" --console --skip-grant-tables
mysql -uroot -p
use mysql
update user set authentication_string = password('root') where user = 'root'; #5.1中字段叫password
FLUSH PRIVILEGES;
关闭cmd窗口
服务中开启mysql